C# DataAdapter


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 屬性返回數據源中的數據;InsertCommandUpdateCommand 和 DeleteCommand 屬性用於管理數據源中的更改。調用 DataAdapter 的Fill 方法之前必須設置 SelectCommand 屬性。在調用 DataAdapter 的 Update 方法之前必須設置InsertCommandUpdateCommand 或 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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM