DataAdapter對象

1  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個屬性來執行更新操作。
 
2  DataAdapter對象的常用方法
 
DataAdapter 對象主要用來把數據源的數據填充到DataSet中,以及把DataSet裏的數據更新到數據庫,同樣有SqlDataAdapter和 OleDbAdapter兩種對象。它的常用方法有構造函數、填充或刷新DataSet的方法、將DataSet中的數據更新到數據庫裏的方法和釋放資源的方法。
 
1. 構造函數
 
不同類型的Provider使用不同的構造函數來完成DataAdapter對象的構造。對於SqlDataAdapter類,其構造函數說明如表所示。
 
表 SqlDataAdapter類構造函數說明
 

 


函 數 定 義
 

參 數 說 明
 

函 數 說 明
 

 

SqlDataAdapter()
 

不帶參數
 

創建SqlDataAdapter對象
 

 

SqlDataAdapter(

SqlCommand selectCommand)
 

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


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

 

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
 

OleDbDataAdapter的構造函數類似SqlDataAdapter的構造函數,如下表所述。
 
表 OleDbDataAdapter類構造函數說明
 

 


函 數 定 義
 

參 數 說 明
 

函 數 說 明
 

 

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,String selectConnectionString)
 

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

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

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

2. Fill類方法
 
當調用 Fill 方法時,它將向數據存儲區傳輸一條 SQL SELECT 語句。該方法主要用來填充或刷新DataSet,返回值是影響DataSet的行數。該方法的常用定義如表所示。
 
表  DataAdapter類的Fill方法說明
 

 


函 數 定 義
 

參 數 說 明
 

函 數 說 明
 

 

int Fill (DataSet dataset)


dataset:需要更新的DataSet
 

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

 

int Fill (DataSet
dataset,string srcTable)


dataset:需要更新的DataSet

srcTable:填充DataSet的dataTable名
 

根據dataTable名填充DataSet
 

3. int Update(DataSet dataSet)方法
 
當程序調用 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 的新行。
 
3  DataAdapter對象代碼示例
 
下面的代碼將說明如何利用DataAdapter對象填充DataSet對象。
 
private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"
 
string sqlStr =" Select * from USER";
 
//利用構造函數,創建DataAdapter
 
SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);
 
//創建DataSet
 
DataSet ds = new DataSet();
 
//填充,第一個參數是要填充的dataset對象,第二個參數是填充dataset的datatable
 
Da.Fill(ds, "USER");
 
上述代碼使用DataApater對象填充DataSet對象的步驟如下。
 
(1) 根據連接字符串和SQL語句,創建一個SqlDataAdapter對象。這裏,雖然沒有出現Connection和Command對象的控制語句,但是 SqlDataAdapter對象會在創建的時候,自動構造對應的SqlConnection和SqlCommand對象,同時根據連接字符串自動初始化連接。要注意的是,此時SqlConnection和SqlCommand對象都處於關閉狀態。
 
(2) 創建DataSet對象,該對象需要用DataAdapter填充。
 
(3) 調用DataAdapter的Fill方法,通過DataTable填充DataSet對象。由於跟隨DataAdapter對象創建的Command裏的SQL語句是訪問數據庫裏的USER表,所以在調用Fill方法的時候,在打開對應的SqlConnection和SqlCommand對象後,會用 USER表的數據填充創建一個名爲USER的DataTable對象,再用該DataTable填充到DataSet中。
 
下面的代碼演示瞭如何使用DataAdapter對象將DataSet中的數據更新到數據庫。
 
private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"
 
string sqlStr = "Select * from USER";
 
//利用構造函數,創建DataAdapter
 
SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);
 
//創建DataSet
 
DataSet ds = new DataSet();
 
//填充,第一個參數是要填充的dataset對象,第二個參數是填充dataset的datatable
 
Da.Fill(ds, "USER");
 
//以下代碼將更新DataSet裏的數據
 
//在DataSet裏的名爲"USER"的DataTable裏添加一個用於描述行記錄的DataRow對象
 
DataRow dr = ds.Tables["USER"].NewRow();
 
//通過DataRow對象添加一條記錄
 
dr["USERID"] = "ID2";
 
dr["USERNAME"] =  "TOM";
 
ds.Table["USER"].Rows.Add(dr);
 
//更新到數據庫裏
 
SqlCommandBuilder scb = new SqlCommandBuilder(da);
 
da.update(ds, "USER");
 
在上述代碼裏,首先使用DataAdapter填充DataSet對象,然後通過DataRow對象,向 DataSet添加一條記錄,最後使用DataSet的update方法將添加的記錄提交到數據庫中。執行完update語句,數據庫USER中就多了一條USERID是ID2、USERNAME是TOM的記錄。
 
此外,上述代碼出現的SqlCommandBuilder對象用來對數據表進行操作。用了這個對象,就不必再繁瑣地使用DataAdapter的UpdataCommand屬性來執行更新操作。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/kybd2006/archive/2007/07/13/1688366.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章