SqlDataAdapter簡單介紹 (轉)

bbker發表於2015-05-30

 

一、特點介紹

1、表示用於填充 DataSet 和更新 SQL Server 資料庫的一組資料命令和一個資料庫連線。
2、在SqlDataAdapter和DataSet之間沒有直接連線。當完成SqlDataAdpater.Fill(DataSet)呼叫後,兩個物件之間就沒有連線了。

 

 
******

        SqlDataAdapter的Fill方法呼叫前不需要有活動的SqlConnection物件,SqlDataAdapter會自己開啟strConn語句中的資料庫,獲取查詢結果後,關閉與資料庫的連線。如果已經存在SqlConnection物件,無論是否已經開啟,SqlDataAdapter執行完Fill方法後,均會將SqlConnection物件返回到原始狀態。
        當程式中的多個SqlDataAdapter物件使用都一個SqlConnection物件時,為避免多次開啟與關閉SqlConnection物件,應該在呼叫SqlDataAdapter的Fill方法前呼叫SqlConnection的Open方法開啟資料庫的連線,待完成Fill呼叫後再呼叫SqlConnection的Close方法關閉資料庫的連線。

******

 

 

二、使用介紹

 1、建立SqlDataAdapter
...
string strSQL=“Select * from Customers”;
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;

 

2、SqlDataAdapter建構函式
①string strConn=“Provider=.....”;
string strSQL=“select * from Customers”;
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
②string strConn=“Provider=.....”;
SqlConnection cn=new SqlConnection(strConn);
SqlDataAdapter da=new SqlDataAdapter(“select * from Customers”,cn);
③string strConn=“Provider=.....”;
string strSQL=“select * from Customers”;
SqlConnection cn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataAdapter da=new SqlDataAdapter(cmd);

 

3、從查詢中獲取結果
①使用Fill方法
...
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
DataSet ds=new DataSet();
da.Fill(ds); //這裡ds中的表名為Table
②使用Fill方法建立DataTable物件和DataColumn物件
...
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);

// 讓ds.Tables[0].TableName為 Customers

da.TableMapping.Add(“Table”,“Customers”);  

DataSet ds=new DataSet();
da.Fill(ds);
③使用過載Fill方法
SqlDataAdapter.Fill(DataSet,“Customers”);
SqlDataAdapter.Fill(DataTable);
SqlDataAdapter.Fill(DataSet,intStartRecord,intNumRecords,“TableName”);
④開放和關閉連線

如 果呼叫了一個SqlDataAdapter物件的Fill方法,而SelectCommand屬性的Connection關閉了,那麼 SqlDataAdapter就會開放一個連線,然後提交查詢、獲取結果、最後關閉連線。如果在呼叫前開放了Connection,那麼操作之後仍然保持 開放。
...
SqlDataAdapter daCustomers,daOrders;
daCustomers=new SqlDataAdapter(“Select * from Customers”,cn);
daOrders=new SqlDataAdapter(“Select * from Orders”,cn);
DataSet ds=new DataSet();
cn.Open();
daCustomers.Fill(ds);
daOrders.Fill(ds);
cn.Close();
⑤多次呼叫Fill方法
重新整理DataSet中的資料,最簡單的解決方法就是清空DataSet(或DataTable),然後再次呼叫DataAdapter物件的Fill方法。

 

三、屬性方法事件介紹
1、屬性
①AcceptChangeDuringFill:確定由DataAdapter所獲取的行的RowState(預設為True)。
②DeleteCommand:獲取或設定一個 Transact-SQL 語句或儲存過程,以從資料集刪除記錄。
③InsertCommand:獲取或設定一個 Transact-SQL 語句或儲存過程,以在資料來源中插入新記錄。
④SelectCommand:獲取或設定一個 Transact-SQL 語句或儲存過程,用於在資料來源中選擇記錄。
⑤UpdateCommand:獲取或設定一個 Transact-SQL 語句或儲存過程,用於更新資料來源中的記錄。
⑥TableMappings:SqlDataAdapter用來將查詢的結果對映到DataSet的資訊集合。
⑦ContinueUpdate:控制SqlDataAdapter在遇到一個錯誤之後是否繼續提交更改(預設為false)。

 

2、方法
①Fill:執行儲存於SelectCommand中的查詢,並將結果儲存在DataTable中。
②FillSchema:為儲存在SelectCommand中儲存的查詢獲取架構資訊。獲取查詢中的各列名稱和資料型別。
③GetFillParameters:為SelectCommand獲取一個包含著引數的陣列。
④Update:向資料庫提交儲存在DataSet(或DataTable、DataRows)中的更改。該方法會返回一個整數值,其中包含著在資料儲存中成功更新的行數。

 

3、事件
①FillError:當DataAdapter遇到填充DataSet或DataTable的一個錯誤時,該事件被觸發。
②RowUpdated:向資料庫提交一個修改的行之後被觸發。
③RowUpdating:向資料庫提交一個修改的行之前被觸發。