9

.Net 中的强类型数据集是什么意思?任何人都可以用一个清晰​​而简短的例子来解释吗?

另外,强类型数据集和弱类型数据集有什么区别?

4

4 回答 4

9

强类型数据集是基于 Db Schema 生成的。它们由派生自 DataSet、DataTable 和 DataRow 的类组成。Db 列成为 TableRow 派生类的正确类型属性。

类型数据集仅意味着直接使用数据集,而不是后代。所有列访问都必须进行类型转换。

没有弱类型数据集这样的东西。

于 2011-02-07T16:07:51.093 回答
8

类型化数据集与非类型化数据集 类型化数据集是首先从基本 DataSet 类派生的数据集,然后使用存储在 .xsd 文件中的数据集设计器中的信息生成新的强类型数据集类。来自模式(表、列等)的信息被生成并编译到这个新的数据集类中,作为一组一流的对象和属性。因为类型化数据集继承自基本 DataSet 类,所以类型化类承担了 DataSet 类的所有功能,并且可以与将 DataSet 类的实例作为参数的方法一起使用

相反,无类型数据集没有相应的内置模式。与类型化数据集一样,非类型化数据集包含表、列等——但这些仅作为集合公开。(但是,在无类型数据集中手动创建表和其他数据元素后,您可以使用数据集的 WriteXmlSchema 方法将数据集的结构导出为模式。)

类型化数据集和非类型化数据集中的数据访问对比 类型化数据集的类具有对象模型,其中其属性采用表和列的实际名称。例如,如果您正在使用类型化数据集,则可以使用如下代码引用列:

C#VB复制

// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;

J#复制

// This accesses the CustomerID column in the first row of the Customers table.
String customerIDValue =
    northwindDataSet.get_Customers().get_Item(0).get_CustomerID();

相反,如果您使用的是无类型数据集,则等效代码为:

C#VB复制

 string customerIDValue = (string)
    dataset1.Tables["Customers"].Rows[0]["CustomerID"];

J#复制

 String customerIDValue = (String)
    dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");

类型化访问不仅更易于阅读,而且在 Visual Studio 代码编辑器中得到 IntelliSense 的完全支持。除了更易于使用之外,类型化数据集的语法在编译时提供了类型检查,从而大大降低了为数据集成员赋值时出错的可能性。如果更改 DataSet 中列的名称,然后编译应用程序,则会收到生成错误。通过双击任务列表中的构建错误,您可以直接转到引用旧列名称的代码行。在运行时访问类型化数据集中的表和列也稍微快一些,因为访问是在编译时确定的,而不是在运行时通过集合确定的。

尽管类型化数据集有很多优点,但在多种情况下,非类型化数据集是有用的。最明显的情况是数据集没有可用的模式。例如,如果您的应用程序正在与返回数据集的组件交互,但您事先不知道其结构是什么,则可能会发生这种情况。同样,有时您处理的数据没有静态的、可预测的结构;在这种情况下,使用类型化数据集是不切实际的,因为您必须随着数据结构的每次更改重新生成类型化数据集类。

更一般地说,很多时候您可能会在没有可用架构的情况下动态创建数据集。在这种情况下,数据集只是一种方便的结构,您可以在其中保存信息,只要数据可以以关系方式表示即可。同时,您可以利用数据集的功能,例如将信息序列化以传递给另一个进程或写出 XML 文件的能力。

于 2012-01-17T06:13:54.117 回答
3

我猜这个区别是这样的:

强类型数据集是数据集在填充数据集时或之前知道与每列关联的类型。

弱类型数据集迫使数据集猜测类型可能是什么。在列可能为空或数字的情况下,数据集可能会错误地猜测预期类型是字符串而不是可为空的 int。

于 2011-02-07T16:06:51.250 回答
2

这是另一个简单的解释:http ://allthingscs.blogspot.com/2011/03/weakly-typed-vs-strongly-typed-objects.html

于 2011-03-10T20:46:27.023 回答