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