亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

使用ADO.NET輕松操縱數據庫(二)

2024-07-21 02:07:54
字體:
來源:轉載
供稿:網友

     首先,ado.net中使用了dataadapter 來處理與數據庫的聯機與脫機。當時開發人員設計了dataadapter是為了能夠處理脫機數據,方便操作,關于這一點,只要調用其fill()方法即可,這時會在dataset中創建一個新的名為“table“的datatable.要重新指定名可用dataadapter.fill(dataset,“tabelname“)。此時connection也關閉了。dataadapter既可以用來提交查詢,并將結果存儲到dataset中,也可以用來向數據庫傳遞更改。僅僅使用其update方法即可達到向數據庫提交存儲地datset中的更改。

    dataadapter將查詢的結果存儲在dataset或datatable對象中,當執行這一過程的時候,dataadapter使用了一個command來與數據庫通訊,并在內部使用了datareader來獲取查詢結果,最后才將結果復制到dataset新行中去。這也是fill的過程。如果有兩個dataadapter對象,都使用相同的connection對象,在創建的時候就會創建兩個connection對象,而不是同一個,這種情況的解決方案是:


   sqlconnection con=new sqlconnection("server=localhost;database=northwind;trusted_connection=yes;")
   sqldataadapter da=new sqldataadapter("select categoryid,description from categories",con);
   sqldataadapter da=new sqldataadapter("select categoryid,description from customers",con);

而不是將查詢字符串,單獨寫成一行。

   有時候可能并不希望dataset中的架構與數據庫中的架構相同,這種情況的解決方案之一是可以采用別名的方法,即select id as product id,amount as product amount from product;另外一種解決方案就是使用dataadapter提供的tablemappings集合機制,通過它就可以將查詢結果映射到dataset結構中,這種方法更方便,更靈活。tablemappings屬性返回一個datatablemappingscollection對象,其中包含了一組datatablemappings,只要dataset中相應的表名稱與數據庫中的表名相同,即可以使用它來創建一個映射(dataset中可以有多個表)。tablemappings里還有一個columnmappings屬性,其用法與tablemappings相似。其原理是dataadapter從數據庫讀取數據后,利用datareader從結果集中獲取列名稱,有一點特別要注意,即只能獲取列名稱而無法獲取表名稱,dataadapter事先假定表名稱為table,接著遇到映射語句則進行表映射。不說了,看代碼:

  datacolumnmapping colmap;
   sqlconnection con=new sqlconnection("server=localhost;database=northwind;trusted_connection=yes;");
   sqldataadapter da=new sqldataadapter("select categoryid,description from categories",con);
   dataset ds=new dataset();

   datatablemapping tblmap=da.tablemappings.add("table","ca"); //這里table為關鍵,映射表名為ca

   colmap=tblmap.columnmappings.add("categoryid","id"); //映射列表
   colmap=tblmap.columnmappings.add("description","描述");
   // response.write(tblmap.datasettable.tostring());
    da.fill(ds);
   datatable dt=ds.tables["ca"]; //這里是映射后的表名,如果仍為數據庫的表名,則無效,特別注意
   this.datagrid1.datasource=dt;
   this.datagrid1.databind();

運行代碼后就會發現datagrid1上的列名為id和描述 (^_^)

(注:使用datatablemapping 之前要前導入名空間system.data.common;)

還可以使用addrange方法來簡化表和列的映射:(一些代碼同上面)

  .......                
   datatablemapping tblmap=da.tablemappings.add("table","ca");       datacolumnmapping[] colmaparray=new datacolumnmapping[]{new datacolumnmapping("categoryid","產   品號"),new datacolumnmapping("description","描述")};        tblmap.columnmappings.addrange(colmaparray);     
   ......                  

這種映射關系只能從數據庫中讀取展示給用戶,如果要將映射后的table的更改提交給數據庫,這時庫發現其中列與庫中列不同,便會發生異常,dataadapter 同時也提供了missingmappingaction屬性來處理。

dataadapter1.missingmappingaction=missingmappingaction.passthrough/ignore/error

它接受missingmappingaction的枚舉值,passthrough這個值表示如果在庫中找不到與dataset中相同列的話,就將此列映射到庫中,ignore枚舉值表示忽略示出現的列,error表示找不到相應的列則拋出異常。

分頁:

分頁在應用中是常有的事,而dataadapter本身也提供了分頁的簡單功能,如:dataadapter1.fill(dataset,startrow,rownum,“tablename“)這種功能用于數據量較小的查詢就可以,但當有大量數據的時候,就會發現這種分頁的問題的存在。它的原理是假如有一百行數據,分成十頁,每頁十行,當獲取每一頁的時候,返回前10行,再接著,第二頁,刪除了前10行而獲取接下的10行,在這一次中,只是為了獲?。保靶袛祿珨祿靺s返回了20行,依此類推,第10頁的時候就會返回100行,而dataadapter本身就幫我們刪除了90行,因為我們看上去返回的還是10行,這種性能太低。因此本篇繼續介紹另外一種性能較高的分頁方法。實際上這種分頁方法是將上一頁最后一行的鍵值存儲下來,直接在sql語句中就過濾掉了,不象前面那種到dataadapter這邊才過濾掉。例:

con=new sqlconnection("server=localhost;database=northwind;trusted_connection=yes;");
da=new sqldataadapter("select top 50 customerid,companyname from customers where customerid>'bottm'",con); 
ds=new dataset();
da.fill(ds,"categories");
this.datagrid1.datasource=ds.tables["categories"]; this.datagrid1.databind();
con.close();

這里假如上一頁最后一個鍵值為”bottm”,可以將它用參數替代掉,這樣就查出了在'bottm'之后的50行。這種方法實現簡單效率也高。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频久久| 国产午夜精品一区二区三区| 精品国产欧美成人夜夜嗨| 国产成人精品免高潮费视频| 国产精品电影网站| 精品国产31久久久久久| 国产一区二区三区中文| 国产亚洲一级高清| 国内自拍欧美激情| 亚洲综合中文字幕68页| 欧美人与性动交a欧美精品| 精品无人区太爽高潮在线播放| 高清一区二区三区日本久| 国产成人亚洲综合青青| 91精品国产91久久久久久不卡| 一区二区三区精品99久久| 性色av一区二区三区| 日本精品视频网站| 国产一区视频在线播放| 国产精品青草久久久久福利99| 欧美色欧美亚洲高清在线视频| 久久久亚洲福利精品午夜| 成人免费在线视频网址| 不卡在线观看电视剧完整版| 国产精品香蕉在线观看| 国内伊人久久久久久网站视频| 亚洲的天堂在线中文字幕| 7m精品福利视频导航| 国产精品久久久久久网站| 激情成人在线视频| 最近2019中文免费高清视频观看www99| 日韩精品在线观看网站| 精品亚洲一区二区三区在线播放| 日韩电视剧在线观看免费网站| 亚洲一区二区三区xxx视频| 日韩经典一区二区三区| 久久激情视频免费观看| 26uuu国产精品视频| 精品美女国产在线| 欧美成人午夜免费视在线看片| 久久琪琪电影院| 97久久超碰福利国产精品…| 正在播放欧美一区| 国产激情视频一区| 日韩亚洲在线观看| 97超级碰在线看视频免费在线看| 欧美放荡办公室videos4k| 8x海外华人永久免费日韩内陆视频| 5566成人精品视频免费| 久久久亚洲网站| 精品久久久在线观看| 亚洲黄色有码视频| 奇米成人av国产一区二区三区| 欧美精品成人91久久久久久久| 九九九久久国产免费| 亚洲欧美日韩精品久久亚洲区| 日韩欧美中文免费| 91精品久久久久久久久久另类| 亚洲人成电影网站| 国产精品久久激情| 亚洲网在线观看| 色综合影院在线| 国产精品你懂得| 欧美大片免费观看在线观看网站推荐| 日本精品在线视频| 久久久亚洲福利精品午夜| 久久精品国产精品亚洲| 精品久久香蕉国产线看观看gif| 国产一区视频在线| 日韩欧美第一页| 亚洲一区二区三区成人在线视频精品| 在线国产精品播放| 久久视频精品在线| 精品国产欧美一区二区三区成人| 亚洲欧美中文字幕在线一区| 成人激情在线观看| 亚洲精品之草原avav久久| 综合网日日天干夜夜久久| 91久久久久久久一区二区| 久久久久亚洲精品成人网小说| 亚洲精品国产综合区久久久久久久| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美激情精品一区二区| 日韩大陆欧美高清视频区| 欧美日韩国产专区| 91沈先生在线观看| 亚洲欧美一区二区三区四区| 成人午夜在线视频一区| 2019中文字幕免费视频| 疯狂做受xxxx欧美肥白少妇| 欧美国产日产韩国视频| 另类色图亚洲色图| 精品一区二区三区四区在线| 色偷偷91综合久久噜噜| 国产精品视频免费在线观看| 国产精品h片在线播放| 日韩电影大片中文字幕| 欧美老女人性视频| 成人黄色短视频在线观看| 韩国精品美女www爽爽爽视频| 亚洲成人黄色在线| 91精品视频在线播放| 日韩精品久久久久| 日本19禁啪啪免费观看www| 亚洲国产精品专区久久| 精品国产乱码久久久久酒店| 国产精品h在线观看| 日本精品久久电影| 91久久久久久久久| 亚洲成人性视频| 成人网中文字幕| 国产精品久久在线观看| 久久久久久久久爱| 成人欧美一区二区三区黑人| 中文国产成人精品| 久热爱精品视频线路一| 亚洲影院色无极综合| 久久久久久亚洲精品中文字幕| 国产久一一精品| 国产精品亚洲片夜色在线| 欧美午夜激情视频| 国产精品黄页免费高清在线观看| 日韩av影视在线| 亚洲女同性videos| 国产欧美亚洲视频| 亚洲国产毛片完整版| 国产美女久久精品香蕉69| 亚洲一区二区久久久久久久| 亚洲一级片在线看| 久久久久久久久爱| 色婷婷**av毛片一区| 国产精品一二三在线| 久久久久久久成人| 免费91麻豆精品国产自产在线观看| 精品久久久久久中文字幕| 97视频免费看| 久久黄色av网站| 欧美电影在线观看完整版| 久久久在线免费观看| 疯狂蹂躏欧美一区二区精品| 日韩视频―中文字幕| 91理论片午午论夜理片久久| 在线看福利67194| 91国产精品91| 久久精品91久久香蕉加勒比| 久久精品视频在线播放| 欧美麻豆久久久久久中文| 精品久久久视频| 亚洲国产精品yw在线观看| 国内精品一区二区三区四区| 亚洲电影免费在线观看| 狠狠躁夜夜躁久久躁别揉| 69国产精品成人在线播放| 欧美日韩国产精品一区二区三区四区| 欧美疯狂xxxx大交乱88av| 日韩精品极品在线观看播放免费视频| 尤物精品国产第一福利三区| 久久人人看视频| 亚洲视频自拍偷拍| 日韩中文av在线| 国模视频一区二区| 国产精品极品美女在线观看免费| 国产日韩中文在线| 国产精品69精品一区二区三区|