首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强类型数据集与弱类型数据集

强类型数据集与弱类型数据集
EN

Stack Overflow用户
提问于 2011-02-08 00:00:45
回答 4查看 9.9K关注 0票数 9

.Net中的强类型数据集是什么意思?有没有人能用一个简单明了的例子来解释呢?

另外,强类型数据集和弱类型数据集之间的区别是什么?

EN

回答 4

Stack Overflow用户

发布于 2011-02-08 00:07:51

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

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

不存在弱类型Dataset这样的东西。

票数 9
EN

Stack Overflow用户

发布于 2012-01-17 14:13:54

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

相比之下,非类型化数据集没有对应的内置架构。与类型化数据集中一样,非类型化数据集包含表、列等,但它们仅作为集合公开。(但是,在非类型化数据集中手动创建表和其他数据元素后,可以使用数据集的WriteXmlSchema方法将数据集的结构导出为架构。)

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

C#VBCopy

代码语言:javascript
复制
// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;

J#Copy

代码语言:javascript
复制
// 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

代码语言:javascript
复制
 string customerIDValue = (string)
    dataset1.Tables["Customers"].Rows[0]["CustomerID"];

J#Copy

代码语言:javascript
复制
 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文件的能力。

票数 8
EN

Stack Overflow用户

发布于 2011-02-08 00:06:51

我猜区别是这样的:

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

弱类型数据集强制数据集猜测可能的类型。在列可能为null或数字的情况下,dataset可能会错误地猜测所需的类型是字符串,而不是可以为null的int。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4923418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档