2011-04-22 83 views
1

我正在嘗試Fill我的DataSet帶有查詢SqlDataAdaptor。我不明白的是爲什麼我必須在Fill中具體說明表名,當我已經給SqlDataAdapter哪個表進行查詢時。爲什麼兩個SqlDataAdaptor都必須指定兩次表?

請參閱下面的代碼,查詢字符串中已經有「FooTable」,爲什麼我需要在SqlDataAdapter.Fill中再次使用「FooTable」?

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

回答

4

事實上,在這種情況下,您不必這樣做,因爲您有一個單一的結果集正在處理。下面是從MSDN相關摘錄:

當查詢指定返回多個結果,每個結果集被放置在一個單獨的表。通過將附加的整數值附加到指定的表名(例如「Table」,「Table1」,「Table2」等)來命名其他結果集。由於沒有爲不返回行的查詢創建表,因此如果要處理插入查詢,然後選擇查詢,爲選擇查詢創建的表將被命名爲「表」,因爲它是創建的第一個表。使用列名和表名的應用程序應確保不會發生與這些命名模式的衝突。 Fill方法支持DataSet包含多個DataTable對象的情況,這些DataTable對象的名稱僅與大小寫不同。在這種情況下,Fill執行區分大小寫的比較來查找相應的表格,並在未存在完全匹配的情況下創建新表格。

以上是從this page採取MSDN的SqlDataAdaptor.Fill()文檔。因此,如果您的查詢是一個存儲過程或某種其他類型的查詢產生多個結果集,那麼您需要指定Fill命令應該使用的結果組。這就是第二個參數。否則,假設由Fill命令本身完成。

通常情況下,如果您只是從表中進行選擇,則結果與您選擇的源表具有相同的名稱。

相關問題