小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一篇文章搞定SqlDataAdapter

 昵稱10222676 2012-06-16
ado.net提供了豐富的數(shù)據(jù)庫(kù)操作,在這些操作中SqlConnection和SqlCommand類是必須使用的,但接下來可以分為兩類操作:
一類是用SqlDataReader直接一行一行的讀取數(shù)據(jù)庫(kù)。
第二類是SqlDataAdapter聯(lián)合DataSet來讀取數(shù)據(jù)。

兩者比較:
SqlDataReader由于是直接訪問數(shù)據(jù)庫(kù),所以效率較高。但使用起來不方便。
SqlDataAdapter可以把數(shù)據(jù)庫(kù)的數(shù)據(jù)緩存在內(nèi)存中,以數(shù)據(jù)集的方式進(jìn)行填充。這種方式使用起來更方,便簡(jiǎn)單。但性能較第一種稍微差一點(diǎn)。(在一般的情況下兩者的性能可以忽略不計(jì)。)

先看一個(gè)比較簡(jiǎn)單的代碼:

 public void SqlAdapterDemo1(string connStr)
{
  SqlConnection conn 
= new SqlConnection(connStr);//連接對(duì)象

  SqlCommand cmd 
= conn.CreateCommand();//sql命令對(duì)象
  cmd.CommandType = CommandType.Text;
  cmd.CommandText 
= "select * from products = @ID";//sql語(yǔ)句

  cmd.Parameters.Add(
"@ID", SqlDbType.Int);
  cmd.Parameters[
"@ID"].Value = 1;//給參數(shù)sql語(yǔ)句的參數(shù)賦值

  SqlDataAdapter adapter 
= new SqlDataAdapter();//構(gòu)造SqlDataAdapter
  adapter.SelectCommand = cmd;//與sql命令對(duì)象綁定,這個(gè)必不可少

  DataSet ds 
= new DataSet();
  adapter.Fill(ds,
"table1");//填充數(shù)據(jù)。第二個(gè)參數(shù)是數(shù)據(jù)集中內(nèi)存表的名字,可以與數(shù)據(jù)庫(kù)中的不同
                                  
//Fill方法其實(shí)是隱藏的執(zhí)行了Sql命令對(duì)象的CommandText 
  
//填充完了后,就可以方便的訪問數(shù)據(jù)了。例如
  WriteLine(ds.Tables["table1"].Rows[0][1]);}
怎么樣?是不是很簡(jiǎn)單?
以上代碼有一個(gè)地方需要注意,就是沒有顯示的調(diào)用連接對(duì)象的Open()方法。只是因?yàn)樵诿看握{(diào)用Fill()方法的時(shí)候會(huì)自己去維護(hù)連接。調(diào)用Fill()方法并不會(huì)改變之前連接對(duì)象的狀態(tài)。
//連接對(duì)象和sql命令對(duì)象單從上面的代碼只有查詢語(yǔ)句,沒有其他的操作。那么接下來我就針對(duì)其他的操作來進(jìn)一步說明SqlDataAdapter的用法。其他操作(如:增加,修改,刪除等操作)可以分為兩種情況一個(gè)是單表操作,一個(gè)是多表操作。
先來看單表操作:
復(fù)制代碼

//直接把上面的代碼賦值過來
public void SqlAdapterDemo1(string connStr)
{
 
  SqlConnection conn 
= new SqlConnection(connStr);//連接對(duì)象

  多表操作的片段代碼

  cmd.Parameters.Add(
"@ID", SqlDbType.Int);
  cmd.Parameters[
"@ID"].Value = 1;//給參數(shù)sql語(yǔ)句的參數(shù)賦值

  SqlDataAdapter adapter 
= new SqlDataAdapter();//構(gòu)造SqlDataAdapter
  adapter.SelectCommand = cmd;//與sql命令對(duì)象綁定,這個(gè)必不可少

  SqlCommandBuilder builder 
= new SqlCommandBuilder(adapter);//在構(gòu)造好了SqlDataAdapter對(duì)象                                                                                                //加上此句代碼

  DataSet ds 
= new DataSet();
  adapter.Fill(ds,
"table1");//填充數(shù)據(jù)。第二個(gè)參數(shù)是數(shù)據(jù)集中內(nèi)存表的名字,可以與數(shù)據(jù)庫(kù)中的不同
                                  
//Fill方法其實(shí)是隱藏的執(zhí)行了Sql命令對(duì)象的CommandText 
  
//填充完了后,就可以方便的訪問數(shù)據(jù)了。例如
  WriteLine(ds.Tables["table1"].Rows[0][1]);

  
//修改操作
  ds.Tables["table1"].Rows[0][1= "Sample2";//此句代碼只是修改了數(shù)據(jù)集中某夠值

  
//更新到數(shù)據(jù)庫(kù)
  adapter.Update(ds, "table1");//把內(nèi)存中的數(shù)據(jù)同步到數(shù)據(jù)庫(kù)中
復(fù)制代碼
上面的修改代碼很簡(jiǎn)單,原理就是修改了內(nèi)存中數(shù)據(jù)集的數(shù)據(jù),然后調(diào)用一下Update()方法就同步到數(shù)據(jù)庫(kù)中去了。SqlDataAdapter幫我們自動(dòng)生成了Sql語(yǔ)句,并且在這里Update()方法是帶了事務(wù)處理功能的。其他的刪除,增加操作同理,在對(duì)內(nèi)存中的數(shù)據(jù)集進(jìn)行相關(guān)修改后,只需要調(diào)用一下Update()方法即可同步到數(shù)據(jù)庫(kù)中去。但遺憾的是,目前這種方式只支持單表的操作,不支持任何與多表相關(guān)的操作(包括同一視圖中來自不同表的列)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多