SqlDataAdapter概述


SqlDataAdapter是 DataSet和 SQL Server之間的橋接器,用於檢索和保存數據。SqlDataAdapter通過對數據源使用適當的Transact-SQL語句映射 Fill(它可更改DataSet中的數據以匹配數據源中的數據)和 Update(它可更改數據源中的數據以匹配 DataSet中的數據)來提供這一橋接。當SqlDataAdapter填充 DataSet時,它為返回的數據創建必需的表和列(如果這些表和列尚不存在)。

使用方法

 

1、通過連接字符串和查詢語句 

 

string strConn="uid=賬號;pwd=密碼;database=數據庫;server=服務器";//SQL Server鏈接字符串
strSql="SELECT * FROM 表名";
 
SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);
DataSet ds=new DataSet();//創建DataSet實例
da.Fill(ds,"自定義虛擬表名");//使用DataAdapter的Fill方法(填充),調用SELECT命令

2、通過查詢語句和SqlConnection對象來創建

 

string strConn="uid=賬號;pwd=密碼;database=數據庫;server=服務器";//SQL Server鏈接字符串  
SqlConnection conn=new SqlConnection(strConn);  
string strSql="SELECT * FROM 表名";  
SqlDataAdapter da = new SqlDataAdapter(strSql, conn);  
DataSet ds=new DataSet();//創建DataSet實例  
da.Fill(ds,"自定義虛擬表名");//使用DataAdapter的Fill方法(填充),調用SELECT命令  

 3、通過SqlCommand對象來創建

 

 

 

string strConn="uid=賬號;pwd=密碼;database=數據庫;server=服務器";//SQL Server鏈接字符串    
SqlConnection connSql=new SqlConnection (strConn); //Sql鏈接類的實例化    
connSql.Open ();//打開數據庫    
//使用SqlDataAdapter時沒有必要從Connection.open()打開,    
//SqlDataAdapter會自動打開關閉它。    
string strSql = "SELECT * FROM 表名"; //要執行的SQL語句    
SqlCommand cmd = new SqlCommand(strSql, connSql);  
SqlDataAdapter da=new SqlDataAdapter(cmd); //創建DataAdapter數據適配器實例    
DataSet ds=new DataSet();//創建DataSet實例    
da.Fill(ds,"自定義虛擬表名");//使用DataAdapter的Fill方法(填充),調用SELECT命令    
connSql.Close();//關閉數據庫 

 

 注意

如果只需要執行SQL語句或SP,就沒必要用到DataAdapter ,直接用SqlCommandExecute系列方法就可以了。sqlDataadapter的作用是實現DatasetDB之間的橋梁:比如將對DataSet的修改更新到數據庫

SqlDataAdapterUpdateCommand的執行機制是:當調用SqlDataAdapter.Update()時,檢查DataSet中的所有行,然后對每一個修改過的Row執行SqlDataAdapter.UpdateCommand ,也就是說如果未修改DataSet中的數據,SqlDataAdapter.UpdateCommand不會執行。

 

1、在使用Fill方式時,可以指定DataTable,而不是DataSet

 

 

string strConn="uid=賬號;pwd=密碼;database=數據庫;server=服務器";//SQL Server鏈接字符串    
strSql="SELECT * FROM 表名";    
   
SqlDataAdapter da = new SqlDataAdapter(strSql, strConn);  
DataTable tbl=new DataTable( );  
da.Fill(tbl); 

 

 2、注意打開和關閉連接的處理

在調用SqlCommand對象執行sql命令之前,需要保證與該對象關聯的SqlConnection對象是打開的,否則SqlCommand的方法執行時將引發一個異常,但是我們在上面的代碼中看到,SqlDataAdapter沒有這樣的要求。

 

如果調用SqlDataAdapterFill方法,並且其SelectCommand屬性的SqlConnection是關閉狀態,則SqlDataAdapter會自動打開它,然后提交查詢,獲取結果,最后關閉連接。如果在調用Fill方法前,SqlConnection是打開的,則查詢執行完畢后,SqlConnection還將是打開的,也就是說SqlDataAdapter會保證SqlConnection的狀態恢復到原來的情形

 

string strConn="uid=賬號;pwd=密碼;database=數據庫;server=服務器";//SQL Server鏈接字符串    
SqlConnection conn=new SqlConnection(strConn);  
SqlDataAdapter daCustomers,daOrders;  
   
strSql="SELECT * FROM Customers";  
daCustomers = new SqlDataAdapter(strSql, conn);  
   
strSql="SELECT * FROM Orders";  
daOrders=new SqlDataAdapter(strSql, conn);  
  
DataSet ds=new DataSet();  
   
daCustomers.Fill(ds,"Customers");  
daOrders.Fill(ds,"Orders"); 

 

 以上代碼會導致連接被打開和關閉兩次,在調用Fill方法時各一次。為了避免打開和關閉SqlConnection對象,在調用SqlDataAdapter對象的Fill方法之前,我們可以先打開SqlConnection對象,如果希望之后關閉連接,我們可以再調用Close方法,就像這樣:

 

conn.Open()  
strSql="SELECT * FROM Customers";  
daCustomers = new SqlDataAdapter(strSql, conn);  
   
strSql="SELECT * FROM Orders";  
daOrders=new SqlDataAdapter(strSql, conn);  
  
DataSet ds=new DataSet();  
   
daCustomers.Fill(ds,"Customers");  
daOrders.Fill(ds,"Orders"); 
conn.Close();

 

3、多次調用Fill方法需要注意數據重復和有效更新數據的問題

推薦的做法是,在調用Fill方法前,先刪除本地DataSet中緩存的數據!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM