.Net中的强类型数据集是什么意思?有没有人能用一个简单明了的例子来解释呢?
另外,强类型数据集和弱类型数据集之间的区别是什么?
发布于 2011-02-08 00:07:51
强类型数据集是基于Db架构生成的。它们由从DataSet、DataTable和DataRow派生的类组成。Db列成为TableRow派生类的正确类型化属性。
非类型化数据集仅仅意味着直接使用Dataset,而不是后代。所有列访问都必须是类型转换的。
不存在弱类型Dataset这样的东西。
发布于 2012-01-17 14:13:54
类型化数据集与非类型化数据集类型化数据集是首先从dataset基类派生的数据集,然后使用存储在.xsd文件中的数据集设计器中的信息生成新的强类型数据集类。生成架构中的信息(表、列等),并将其作为一组一流的对象和属性编译到这个新的dataset类中。由于类型化dataset继承自DataSet基类,因此类型化类采用DataSet类的所有功能,并可与以DataSet类的实例作为参数的方法一起使用
相比之下,非类型化数据集没有对应的内置架构。与类型化数据集中一样,非类型化数据集包含表、列等,但它们仅作为集合公开。(但是,在非类型化数据集中手动创建表和其他数据元素后,可以使用数据集的WriteXmlSchema方法将数据集的结构导出为架构。)
类型化数据集中的数据访问与非类型化数据集中的数据访问不同,类型化数据集的类具有一个对象模型,在该对象模型中,其属性采用表和列的实际名称。例如,如果您正在使用类型化数据集,则可以使用如下代码引用列:
C#VBCopy
// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;J#Copy
// This accesses the CustomerID column in the first row of the Customers table.
String customerIDValue =
northwindDataSet.get_Customers().get_Item(0).get_CustomerID();相比之下,如果使用的是非类型化数据集,则等效代码为:
C#VBCopy
string customerIDValue = (string)
dataset1.Tables["Customers"].Rows[0]["CustomerID"];J#Copy
String customerIDValue = (String)
dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");类型化访问不仅更易于阅读,而且Visual Studio代码编辑器中的IntelliSense完全支持类型化访问。除了更易于使用外,类型化dataset的语法还提供了编译时的类型检查,从而大大降低了为dataset成员赋值时出错的可能性。如果更改DataSet中列的名称,然后编译应用程序,则会收到生成错误。通过双击“任务列表”中的生成错误,可以直接转到引用旧列名的一行或多行代码。对类型化数据集中的表和列的访问在运行时也会稍微快一些,因为访问是在编译时确定的,而不是通过运行时的集合确定的。
尽管类型化数据集有许多优点,但在许多情况下,非类型化数据集也是有用的。最明显的情况是dataset没有可用的架构。例如,如果您的应用程序正在与返回数据集的组件进行交互,但您事先不知道其结构是什么,则可能会发生这种情况。同样,有时您使用的数据不具有静态的、可预测的结构;在这种情况下,使用类型化数据集是不切实际的,因为每次更改数据结构时,都必须重新生成类型化数据集类。
更广泛地说,在很多情况下,您可能会在没有可用的架构的情况下动态创建数据集。在这种情况下,数据集只是一种方便的结构,您可以在其中保留信息,只要数据可以用关系方式表示即可。同时,您可以利用dataset的功能,例如序列化信息以传递到另一个进程的能力,或者写出XML文件的能力。
发布于 2011-02-08 00:06:51
我猜区别是这样的:
强类型数据集是指在填充数据集时或之前,数据集知道与每一列关联的类型。
弱类型数据集强制数据集猜测可能的类型。在列可能为null或数字的情况下,dataset可能会错误地猜测所需的类型是字符串,而不是可以为null的int。
https://stackoverflow.com/questions/4923418
复制相似问题