1

我正在尝试使用 Query 中的Fill查询。我不明白的是,当我已经给出了要查询的表时,为什么我必须在 中明确说明表名。DataSetSqlDataAdaptorFillSqlDataAdapter

看下面的代码,查询字符串中已经有“FooTable”了,为什么在SqlDataAdapter.Fill中又需要“FooTable”呢?

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

1 回答 1

4

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

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

以上内容取自MSDN 的 SqlDataAdaptor.Fill() 文档上的此页面。

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

通常,如果您只是从表中进行选择,则结果集与您从中选择的源表具有相同的名称

于 2011-04-22T03:23:00.083 回答