C#與數據庫訪問技術總結(十四)之DataAdapter對象


DataAdapter對象

DataAdapter對象主要用來承接Connection和DataSet對象。

DataSet對象只關心訪問操作數據,而不關心自身包含的數據信息來自哪個Connection連接到的數據源,

而Connection對象只負責數據庫連接而不關心結果集的表示。

所以,在ASP.NET的架構中使用DataAdapter對象來連接Connection和DataSet對象。

另外,DataAdapter對象能根據數據庫里的表的字段結構,動態地塑造DataSet對象的數據結構。

DataAdapter對象的常用屬性

DataAdapter對象的工作步驟一般有兩種,

一種是通過Command對象執行SQL語句,將獲得的結果集填充到DataSet對象中;

另一種是將DataSet里更新數據的結果返回到數據庫中。

DataAdapter對象的常用屬性形式為XXXCommand,用於描述和設置操作數據庫。

使用DataAdapter對象,可以讀取、添加、更新和刪除數據源中的記錄。

對於每種操作的執行方式,適配器支持以下4個屬性,類型都是Command,分別用來管理數據操作的“增”、“刪”、 “改”、“查”動作。

SelectCommand屬性:該屬性用來從數據庫中檢索數據。

InsertCommand屬性:該屬性用來向數據庫中插入數據。

DeleteCommand屬性:該屬性用來刪除數據庫里的數據。

UpdateCommand屬性:該屬性用來更新數據庫里的數據。

例如,以下代碼能給DataAdapter對象的selectCommand屬性賦值。

//連接字符串

SqlConnection conn;

//創建連接對象conn語句

//創建DataAdapter 對象

SqlDataAdapter da=new SqlDataAdapter;

//給DataAdapter對象SelectCommand屬性賦值

da.SelectCommand =new SqlCommand(" select * from user ", conn);

//后繼代碼

同樣,可以使用上述方式給其他的InsertCommand、DeleteCommand和UpdateCommand屬性賦值。

當在代碼里使用DataAdapter對象的SelectCommand屬性獲得數據表的連接數據時,

如果表中數據有主鍵,就可以使用CommandBuilder對象來自動為這個DataAdapter對象隱形地生成其他3個InsertCommand、DeleteCommand和UpdateCommand屬性。

這樣,在修改數據后,就可以直接調用Update方法將修改后的數據更新到數據庫中,而不必再使用InsertCommand、DeleteCommand和UpdateCommand這3個屬性來執行更新操作。

DataAdapter對象的常用方法

DataAdapter對象主要用來把數據源的數據填充到DataSet中,以及把DataSet里的數據更新到數據庫,同樣有SqlDataAdapter和OleDbAdapter兩種對象。

它的常用方法有構造函數、填充或刷新DataSet的方法、將DataSet中的數據更新到數據庫里的方法和釋放資源的方法。

    1.構造函數

    不同類型的Provider使用不同的構造函數來完成DataAdapter對象的構造。對於SqlDataAdapter類,其構造函數說明如下表所示。 

函數定義 

參數說明 

函數說明 

SqlDataAdapter()

不帶參數

創建SqlDataAdapter對象 

SqlDataAdapter(SqlCommand selectCommand

selectCommand:指定新創建對象的SelectCommand屬性

創建SqlDataAdapter對象。用參數selectCommand設置其Select Command屬性

SqlDataAdapter(string selectCommandText, SqlConnection selectConnection)

selectCommandText:指定新創建對象的SelectCommand屬性值

selectConnection:指定連接對象

創建SqlDataAdapter對象。用參數selectCommandText設置其Select Command屬性值,並設置其連接對象是selectConnection 

SqlDataAdapter(string   selectCommandText,String selectConnectionString

selectCommandText:指定新創建對象的SelectCommand屬性值

selectConnectionString:指定新創建對象的連接字符串

創建SqlDataAdapter對象。將參數selectCommandText設置為Select Command屬性值,其連接字符串是selectConnectionString

 

 

 

 

 

 

 

 

 

 

 

 

 

 

O1eDbDataAdapter的構造函數類似SqlDataAdapter的構造函數,如下表2所述。

 

函數定義 

參數說明

  函數說明 

OleDbDataAdapter()

不帶參數

創建OleDbDataAdapter對象

OleDbDataAdapter( OleDbCommand  selectCommand)

selectCommand:指定新創建對象的SelectCommand屬性  

創建OleDbDataAdapter對象。用參數selectCommand設置其SelectCommand屬性

OleDbDataAdapter(string selectCommandText,

OleDbConnection  selectConnection)  

 

selectCommandText: 指定新創建對象的SelectCommand屬性值

selectConnection:指定連接對象

創建SqlDataAdapter對象。用參數selectCommandText設置其SelectCommand屬性值,並設置其連接對象是selectConnection

OleDbDataAdapter(string selectCommandText,Stnng selectConnectionString)

selectCommandText:指定新創建對象的SelectCommand屬性值

selectConnectionString:指定新創建對象的連接字符串

創建OleDbDataAdapter對象。將參數selectCommandText設置為SelectCommand屬性值,其連接字符串是selectConnectionString

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

2.Fill類方法.

當調用Fill方法時,它將向數據存儲區傳輸一條SQL SELECT語句。

該方法主要用來填充或刷新DataSet,返回值是影響DataSet的行數。

該方法的常用定義如表所示。 

函數定義

參數說明

函數說明

int Fill(DataSet  dataset)

dataset:需要更新的DataSet

根據匹配的數據源,添加或更新參數所指定的DataSet,返回值是影響的行數

int Fill(DataSet dataset,

string srcTable)

dataset:需要更新的DataSet

srcTable:填充DataSet的dataTable名

根據dataTable名填充DataSet

 

 

 

 

 

 

 

 

3.int  Update(DaraSetdataSet)方法

當程序調用Update方法時,DataAdapter將檢查參數DataSet每一行的RowState屬性,根據RowState屬性來檢查DataSet里的每行是否改變和改變的類型,並依次執行所需的INSERT、UPDATE或DELETE語句,將改變提交到數據庫中。

這個方法返回影響DataSet的行數。

更准確地說,Update方法會將更改解析回數據源,但自上次填充DataSet以來,其他客戶端可能已修改了數據源中的數據。

若要使用當前數據刷新DataSet,應使用DataAdapter和Fill方法。

新行將添加到該表中,更新的信息將並入現有行。

Fill方法通過檢查DataSet中行的主鍵值及SelectCommand返回的行來確定是要添加一個新行還是更新現有行。

如果Fill方法發現DataSet中某行的主鍵值與SelectCommand返回結果中某行的主鍵值相匹配,則它將用SelectCommand返回的行中的信息更新現有行,並將現有行的RowState設置為Unchanged。

如果SelectCommand返回的行所具有的主鍵值與DataSet中行的任何主鍵值都不匹配,則Fill方法將添加RowState為Unchanged的新行。


免責聲明!

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



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