为什么两个SqlDataAdaptor都必须指定Table两次

本文关键字:两次 Table SqlDataAdaptor 两个 为什么 | 更新日期: 2023-09-27 17:52:36

我正试图在SqlDataAdaptor中查询Fill我的DataSet。我不明白的是,当我已经给了SqlDataAdapter要查询的表时,为什么我必须特别说明Fill中的表名称。

参见下面的代码,查询字符串中已经有"FooTable",为什么我需要在SqlDataAdapter.Fill中再次出现"FooTable"?

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FooTable", connectionString);
DataSet ds = new DataSet();
da.Fill(ds, "FooTable");

为什么两个SqlDataAdaptor都必须指定Table两次

实际上,在这种情况下您不必这样做,因为您要处理的是单个结果集。以下是MSDN的相关摘录:

当指定的查询返回多个结果时,每个结果集被放在一个单独的表中。其他结果集通过向指定的表名(例如,"table"、"Table1"、"Table2"等)附加整数值来命名。由于不会为不返回行的查询创建表,如果要处理插入查询和选择查询,那么为选择查询创建的表将被命名为"table",因为它是创建的第一个表。使用列和表名称的应用程序应确保不会发生与这些命名模式的冲突。Fill方法支持数据集包含多个DataTable对象的场景,这些对象的名称仅按大小写不同。在这种情况下,Fill执行区分大小写的比较来查找相应的表,如果不存在精确匹配,则创建一个新表。

以上内容摘自MSDN的sqldataadapter . fill()文档中的本页。

因此,如果您的查询是存储过程或产生多个结果集的其他类型的查询,则需要指定Fill命令应该使用哪个结果集。这就是第二个参数的作用。否则,将由Fill命令本身做出假设。

通常,如果您只是从表中执行select操作,结果集与您正在从中选择的源表具有相同的名称。