DataSet的类型化数据集和非类型化数据集的区别?
rt
[解决办法]
帮LZ顶
[解决办法]
类型化数据集与非类型化数据集
类型化数据集先是从基类 DataSet 派生,然后使用“数据集设计器”中的信息(存储在 .xsd 文件中)生成一个新的强类型数据集类。架构中的信息(表、列等)被作为一组第一类对象和属性生成并编译为此新数据集类。由于类型化数据集继承自基 DataSet 类,因此类型化类具有 DataSet 类的所有功能,可以与采用 DataSet 类的实例作为参数的方法一起使用。
相形之下,非类型化数据集没有相应的内置架构。与类型化数据集一样,非类型化数据集也包含表、列等,但它们只作为集合公开。(不过,在手动创建了非类型化数据集中的表和其他数据元素后,可以使用数据集的 WriteXmlSchema 方法将数据集的结构导出为一个架构。)
对比类型化和非类型化数据集中的数据访问
类型化数据集的类有一个对象模型,在此对象模型中该类的属性采用表和列的实际名称。例如,如果使用的是类型化数据集,可以使用如下代码引用列:
// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;
相比较而言,如果使用的是非类型化数据集,等效的代码为:
string customerIDValue = (string)
dataset1.Tables[ "Customers "].Rows[0][ "CustomerID "];
类型化访问不但更易于读取,而且完全受 Visual Studio“代码编辑器”中 IntelliSense 的支持。除了更易于使用外,类型化数据集的语法还在编译时提供类型检查,从而大大降低了为数据集成员赋值时发生错误的可能性。如果更改 DataSet 中的列名并编译应用程序,则会收到生成错误。通过双击“任务列表”中的生成错误,可以直接转到引用旧列名的代码行。在运行时对类型化数据集中的表和列的访问也略为快一些,因为访问是在编译时确定的,而不是在运行时通过集合确定。
尽管类型化数据集有许多优点,但在许多情况下需要使用非类型化数据集。最显而易见的情形是数据集无架构可用。例如,当应用程序正在与返回数据集的组件交互而您事先不知道其结构是哪种时,便会出现这种情况。同样,有些时候使用的数据不具有静态的可预知结构,这种情况下使用类型化数据集是不切实际的做法,因为对于数据结构中的每个更改,您都必须重新生成类型化数据集类。
更常见的是,许多时候可能需要动态创建无可用架构的数据集。这种情况下,数据集只是一种方便的、可用来保留信息的结构(只要数据可以用关系方法表示)。同时,您还可以利用数据集的功能,如序列化传递到另一进程的信息或写出 XML 文件的能力。
----来自MSDN