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