DataAdapter 用於從數據源檢索數據並填充 DataSet 中的表。DataAdapter 還可將對 DataSet 所做的更改解析回數據源。
1. 從 DataAdapter 填充數據集
DataAdapter是 DataSet 與數據源的橋梁。形象的來說,DataAdapter 是一個運輸車,它把信息從數據庫運到DataSet中,同樣也可以把DataSet中的信息運送到數據庫中。
我們主要使用 DataAdapter 的 fill 方法來講數據庫的信息運送到 DataSet 中。DataSet 相當於在內存中模擬出一個數據庫。所以,從數據庫來的信息要同樣在 DataSet 中有相應的表(我們一般用數據庫中真實的表名來命名)來存儲。也就是說,我們要告訴 fill 方法,內存中的目標數據庫和目標數據表。需要注意的是,使用 DataAdapter 檢索表的全部內容會花費些時間,尤其是在表中有很多行時。這是因為訪問數據庫,定位和處理數據,然后將數據傳輸到客戶端是需要很長時間的。
示例:
// Assumes that connection is a valid SqlConnection object. string queryString = "SELECT CustomerID, CompanyName FROM dbo.Customers"; SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection); DataSet customers = new DataSet(); adapter.Fill(customers, "Customers");
此示例中所示的代碼不顯式打開和關閉 Connection。如果 Fill 方法發現連接尚未打開,它將隱式地打開DataAdapter 正在使用的 Connection。如果 Fill 已打開連接,則它還將在 Fill 完成時關閉連接。當處理單一操作(如 Fill 或 Update)時,這可以簡化您的代碼。但是,執行多項需要打開連接的操作,則可以通過顯式調用 Connection 的 Open 方法,對數據源執行操作,然后調用Connection 的 Close 方法。以提高應用程序的性能。應嘗試使數據源的連接打開的時間盡可能短,以便釋放資源供其他客戶端應用程序使用。
使用方法 fill 的時候,還有其他需要了解的特性。
1. Fill 填充 DataTable 對象時,會根據 DataTable 是否已經存在來自動創建 DataTable 。具體說明可參考我的另一篇文章 C# DataTable。
2. 以在同一個 DataTable 上多次使用 Fill 方法。如果主鍵存在,則傳入行會與已有的匹配行合並。如果主鍵不存在,則傳入行會追加到 DataTable 中。如果命令不返回任何行,則不向 DataSet 中添加表,並且不引發異常。
3. 多次使用方法 fill 。當使用后面的 Fill 調用來刷新 DataSet 的內容時,必須滿足以下兩個條件:
a. 該 SQL 語句應該與最初用來填充 DataSet 的語句匹配。
b. 必須存在鍵列信息。
2. DataAdapter 參數 (ADO.NET)
DbDataAdapter 具有四個用於從數據源檢索數據和更新數據源中數據的屬性:SelectCommand 屬性返回數據源中的數據;InsertCommand、UpdateCommand 和 DeleteCommand 屬性用於管理數據源中的更改。調用 DataAdapter 的Fill 方法之前必須設置 SelectCommand 屬性。在調用 DataAdapter 的 Update 方法之前必須設置InsertCommand、UpdateCommand 或 DeleteCommand 屬性,具體取決於對 DataTable 中的數據做了哪些更改。例如,如果已添加行,在調用 Update 之前必須設置 InsertCommand。當 Update 正在處理已插入、已更新或已刪除的行時,DataAdapter 將使用相應的 Command 屬性來處理該操作。有關已修改行的當前信息將通過 Parameters 集合傳遞到 Command 對象。
具體示例參考我的另一篇博客 C# SqlDataAdapter
3. DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)
略
4. 查詢結果分頁 (ADO.NET)
略
參考文獻:http://msdn.microsoft.com/zh-cn/library/ms254931(v=vs.90)