我正在尝试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}}
答案 0 :(得分:4)
实际上,在这种情况下你不必这样做,因为你有一个你正在处理的结果集。以下是MSDN的相关摘录:
当指定的查询返回多个结果时,每个结果集都放在一个单独的表中。通过将整数值附加到指定的表名称来命名其他结果集(例如,“Table”,“Table1”,“Table2”等)。由于没有为不返回行的查询创建表,因此如果要处理插入查询后跟选择查询,则为select查询创建的表将命名为“Table”,因为它是第一个创建的表。使用列和表名称的应用程序应确保不会发生与这些命名模式的冲突。 Fill方法支持DataSet包含多个DataTable对象的方案,这些对象的名称仅因大小写而异。在这种情况下,Fill执行区分大小写的比较以查找相应的表,如果不存在完全匹配,则创建新表。
以上内容摘自MSDN的SqlDataAdaptor.Fill()文档中的this page。
因此,如果您的查询是存储过程或其他类型的查询,并且您需要指定Fill命令应该使用哪个结果集。这就是第二个参数的作用。否则,假设由填充命令本身做出。
通常,如果您只是从表中进行选择,则结果集与您选择的源表具有相同的名称。