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

时间:2011-04-22 02:49:18

标签: c# wpf sqldataadapter

我正在尝试Fill DataSet SqlDataAdaptor Fill中的查询。我不明白的是,为什么我必须在SqlDataAdapter中明确说明表名,当我已经向SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FooTable", connectionString); DataSet ds = new DataSet(); da.Fill(ds, "FooTable"); 提供要查询的表时。

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

{{1}}

1 个答案:

答案 0 :(得分:4)

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

  

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

以上内容摘自MSDN的SqlDataAdaptor.Fill()文档中的this page

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

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

相关问题