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