Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强类型数据集与弱类型数据集_C#_Visual Studio 2008_Dataset_Strong Typing_Weak Typing - Fatal编程技术网

C# 强类型数据集与弱类型数据集

C# 强类型数据集与弱类型数据集,c#,visual-studio-2008,dataset,strong-typing,weak-typing,C#,Visual Studio 2008,Dataset,Strong Typing,Weak Typing,Net中的强类型数据集是什么意思?有人能用一个简单明了的例子来解释吗 另外,强类型数据集和弱类型数据集之间有什么区别?我猜它们的区别是这样的: 强类型数据集是指数据集在填充数据集时或之前知道与每列关联的类型的数据集 弱类型数据集强制数据集猜测可能的类型。在列可能为null或数字的情况下,数据集可能会错误地猜测预期类型是字符串而不是可为null的int。强类型数据集是基于Db架构生成的。它们由从DataSet、DataTable和DataRow派生的类组成。Db列成为TableRow派生类的正确类

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


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

我猜它们的区别是这样的:

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


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

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

非类型化数据集只是指直接使用数据集,而不是后代。所有列访问必须为类型转换


没有弱类型数据集这回事,这里有另一个简单的解释:

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

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

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

C#VBCopy

J#复制

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

C#VBCopy

J#复制

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

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


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

就我个人而言,我不确定我建议在大多数代码中使用哪种功能;除非您是a:使用内存中的SqlBulkCopy,或b:编写SSMS之类的通用查询工具……您是否尝试过在这方面查看MSDN?两者都描述了你不应该使用的东西。您应该使用ORM:)数据集(类型化或非类型化)不必猜测数据类型。
// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;
// This accesses the CustomerID column in the first row of the Customers table.
String customerIDValue =
    northwindDataSet.get_Customers().get_Item(0).get_CustomerID();
 string customerIDValue = (string)
    dataset1.Tables["Customers"].Rows[0]["CustomerID"];
 String customerIDValue = (String)
    dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");