Mad*_*iha 9 c# dataset weak-typing strong-typing visual-studio-2008
.Net中强类型数据集的含义是什么?任何人都可以用清晰简洁的例子来解释吗?
而且,强类型数据集和弱类型数据集之间有什么区别?
强类型数据集是基于Db架构生成的.它们由从DataSet,DataTable和DataRow派生的类组成.Db列成为TableRow派生类的正确类型属性.
一个非类型化数据集仅仅意味着直接用不的后代数据集的.所有列访问都必须是类型转换.
没有Weakly Typed Dataset这样的东西.
小智 7
键入的与未键入的数据集类型化的数据集是首先从基础DataSet类派生的数据集,然后使用存储在.xsd文件中的数据集设计器中的信息来生成新的强类型数据集类.生成来自模式(表,列等)的信息,并将其作为一组第一类对象和属性编译到此新数据集类中.由于类型化数据集继承自基础DataSet类,因此类型化类假定DataSet类的所有功能,并且可以与将DataSet类的实例作为参数的方法一起使用
相反,无类型数据集没有相应的内置模式.与在类型化数据集中一样,无类型数据集包含表,列等 - 但这些数据集仅作为集合公开.(但是,在无类型数据集中手动创建表和其他数据元素后,可以使用数据集的WriteXmlSchema方法将数据集的结构导出为模式.)
Typed和Untyped数据集中的对比数据访问类型化数据集的类具有一个对象模型,其中的属性采用表和列的实际名称.例如,如果使用的是类型化数据集,则可以使用以下代码引用列:
C#VBCopy
// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;
Run Code Online (Sandbox Code Playgroud)
J#复制
// This accesses the CustomerID column in the first row of the Customers table.
String customerIDValue =
northwindDataSet.get_Customers().get_Item(0).get_CustomerID();
Run Code Online (Sandbox Code Playgroud)
相反,如果您使用的是无类型数据集,则等效代码为:
C#VBCopy
string customerIDValue = (string)
dataset1.Tables["Customers"].Rows[0]["CustomerID"];
Run Code Online (Sandbox Code Playgroud)
J#复制
String customerIDValue = (String)
dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");
Run Code Online (Sandbox Code Playgroud)
类型化访问不仅更易于阅读,而且Visual Studio代码编辑器中的IntelliSense完全支持.除了更易于使用之外,类型化数据集的语法还在编译时提供类型检查,从而大大降低了为数据集成员分配值时出错的可能性.如果更改DataSet中列的名称,然后编译应用程序,则会收到生成错误.通过双击任务列表中的生成错误,您可以直接转到引用旧列名称的一行或多行代码.在运行时访问类型化数据集中的表和列的速度也稍快,因为访问是在编译时确定的,而不是在运行时通过集合确定的.
尽管类型化数据集具有许多优点,但在多种情况下,无类型数据集非常有用.最明显的情况是没有可用于数据集的模式.例如,如果您的应用程序与返回数据集的组件交互,但您事先并不知道其结构是什么,则可能会发生这种情况.同样,有时您正在处理没有静态,可预测结构的数据; 在这种情况下,使用类型化数据集是不切实际的,因为您必须在数据结构中每次更改时重新生成类型化数据集类.
更一般地说,有很多时候您可以在没有架构可用的情况下动态创建数据集.在这种情况下,数据集只是一个方便的结构,您可以在其中保存信息,只要数据可以以关系方式表示.同时,您可以利用数据集的功能,例如序列化信息以传递到另一个进程或写出XML文件的功能.
我猜区别是这样的:
强类型数据集是指数据集在填充时或填充之前知道与每列关联的类型。
弱类型数据集迫使数据集猜测类型可能是什么。如果列可能为 null 或数字,数据集可能会错误地猜测预期类型是字符串而不是可为 null 的 int。