.Net中强类型数据集的含义是什么?任何人都能用清晰简洁的例子来解释吗?
而且,强类型数据集和弱类型数据集之间有什么区别?
答案 0 :(得分:9)
强类型数据集是基于Db架构生成的。它们由从DataSet,DataTable和DataRow派生的类组成。 Db列成为TableRow派生类的正确类型属性。
无类型数据集仅表示直接使用数据集,而不是后代。所有列访问都必须是类型转换。
没有弱类型数据集这样的东西。
答案 1 :(得分:7)
键入与无类型数据集 类型化数据集是首先从基础DataSet类派生的数据集,然后使用存储在.xsd文件中的数据集设计器中的信息来生成新的强类型数据集类。生成来自模式(表,列等)的信息,并将其作为一组第一类对象和属性编译到此新数据集类中。因为类型化数据集继承自基础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#复制
// 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#复制
String customerIDValue = (String)
dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");
类型化访问不仅更易于阅读,而且Visual Studio代码编辑器中的IntelliSense完全支持。除了更易于使用之外,类型化数据集的语法还在编译时提供类型检查,从而大大降低了为数据集成员分配值时出错的可能性。如果更改DataSet中列的名称,然后编译应用程序,则会收到生成错误。通过双击任务列表中的生成错误,您可以直接转到引用旧列名称的一行或多行代码。在运行时访问类型化数据集中的表和列的速度也稍快,因为访问是在编译时确定的,而不是在运行时通过集合确定的。
尽管类型化数据集有许多优点,但在很多情况下,无类型数据集都很有用。最明显的情况是没有可用于数据集的模式。例如,如果您的应用程序与返回数据集的组件交互,但您事先并不知道其结构是什么,则可能会发生这种情况。同样,有时您正在处理没有静态,可预测结构的数据;在这种情况下,使用类型化数据集是不切实际的,因为您必须在数据结构中每次更改时重新生成类型化数据集类。
更一般地说,有很多时候您可以在没有架构可用的情况下动态创建数据集。在这种情况下,数据集只是一个方便的结构,您可以在其中保存信息,只要数据可以以关系方式表示。同时,您可以利用数据集的功能,例如序列化信息以传递到另一个进程,或者写出XML文件。
答案 2 :(得分:3)
我猜这种区别是这样的:
强类型数据集是数据集在填充数据集时或之前知道与每列相关联的类型的位置。
弱类型数据集会强制数据集猜测类型可能是什么。如果列可能为null或数字,则数据集可能会错误地猜测目标类型是字符串而不是可为空的int。
答案 3 :(得分:2)