C#與資料庫訪問技術總結(十四)之DataAdapter物件

[0]發表於2014-11-04

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的新行。

相關文章