国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在C#中更新數據庫(一)

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

這段時間一直在學習c#winform中的數據庫編程,一直沒有搞清楚怎么樣進行數據庫的更新操作,只是知道簡單的查看數據庫,哎,旁邊沒有人學.net的好痛苦呀,什么事情都只能自己弄,連一個人討論的都沒有,還好在網上認識一個兄弟,有什么問題還可以問他。現在弄清楚了其中一種最簡單的數據庫的添加與更新方法。

今天終于弄清楚了怎么樣用dataset對數據庫進行更新了,總結如下:

要操作dataset進行數據庫的添加,更新和刪除,必須弄清楚幾個類:sqldataadapter類,sqlcommandbuilder類等等。

*sqldataadapter類:表示用于填充 dataset 和更新 sql server 數據庫的一組數據命令和一個數據庫連接。dataset 和 sql server 之間的橋接器,用于檢索和保存數據。sqldataadapter 通過對數據源使用適當的 transact-sql 語句映射 fill(它可更改 dataset 中的數據以匹配數據源中的數據)和 update(它可更改數據源中的數據以匹配 dataset 中的數據)來提供這一橋接。其實通俗點來講,這個類的作用就是將數據庫中的數據捆綁到dataset中,然后對dataset進行操作。而dataset可以看成是數據庫中找出的幾個表在內存中臨時存放的地方。它不需要一直和數據庫建立連接,這樣可以保證服務器不會受很大的負擔,因為sqldataadapter類中的fill方法有很好的特性:如果沒有使用conn.open(),那么fill()語句執行時會打開conn,然后使用完了以后關閉conn,如果我使用了conn.open()那么,fill()語句執行以后也不會關閉連接,因為可能有其他的語句需要在連接的情況下執行,此時需要手工關閉連接.對dataset中表的修改也就是對數據庫中表的修改,但是還是要有特定的命令sqlcommandbuilder。

*sqlcommandbuilder類:自動生成具有以下用途的單表命令:使對 dataset 所做的更改與關聯的 sql server 數據庫相協調。sqldataadapter 不會自動生成實現 dataset 的更改與關聯的 sql server 實例之間的協調所需的 transact-sql 語句。但是,如果設置了 sqldataadapter 的 selectcommand 屬性,則可以創建一個 sqlcommandbuilder 對象來自動生成用于單表更新的 transact-sql 語句。然后,sqlcommandbuilder 將生成其他任何未設置的 transact-sql 語句。一旦設置 dataadapter 屬性,sqlcommandbuilder 就將其自身注冊為 rowupdating 事件的偵聽器。一次只能將一個 sqldataadapter 與一個 sqlcommandbuilder 對象(或相反)互相關聯。為了生成 insert、update 或 delete 語句,sqlcommandbuilder 會自動使用 selectcommand 屬性來檢索所需的元數據集。如果在檢索元數據后(例如在第一次更新后)更改 selectcommand,則應調用 refreshschema 方法來更新元數據。sqlcommandbuilder 還使用由 selectcommand 引用的 connection、commandtimeout 和 transaction 屬性。如果修改了任何這些屬性或者替換了 selectcommand 本身,用戶則應調用 refreshschema。否則,insertcommand、updatecommand 和 deletecommand 屬性將保留它們以前的值。如果調用 dispose,則會解除 sqlcommandbuilder 與 sqldataadapter 的關聯,并且不再使用所生成的命令。使用sqlcommandbuilder這個類的時候一定要注意,必須保證所操作的數據庫表中一定要存在主鍵,否則不會自動生成命令,而且會產生異常。

實例代碼:

 string str="server=localhost;uid=sa;pwd=;database=test";
   sqlconnection conn=new sqlconnection(str);
   sqldataadapter adapter=new sqldataadapter("select * from stores",conn);
   //adapter.selectcommand=new sqlcommand("select * from stores",conn);
   sqlcommandbuilder scb=new sqlcommandbuilder(adapter);//自動產生各種命令
   conn.open();
   dataset ds=new dataset();
   adapter.fill(ds,"stores");
   conn.close();
   //console.writeline(ds.tables["stores"].rows[0][0].tostring());
   //ds.tables["stores"].rows[0][0]="1234";
   datatable dt=ds.tables["stores"];
  

 //datarow myrow=dt.newrow();//在表中添加新的行,一定是這樣的。
  myrow["stor_id"]=8345;
   myrow["stor_name"]="king";
   myrow["stor_address"]="hazu";
   myrow["city"]="wuhan";
   myrow["state"]="ab";
   myrow["zip"]="12345";
   dt.rows.add(myrow);  //ds.tables["stores"].rows.add(myrow);//這樣也可以

//dt.rows.add(new object[]{"0101","sha","hazu","wuhan","bc","1532"});  //或者是直接用這句話來添加一行,上面的屬性列的付直可以不用。

 
   adapter.update(ds,"stores");
   console.writeline("修改成功");
   console.read();

以上是添加一行的代碼,對于其他的,如:修改其中的一行,刪除等等,都可以這樣,只要存在sqlcommandbuilder就會自動生成相應的command命令的。

還有一種修改數據庫中信息的方法,那就是過程存儲,明天開始研究,呵呵,好累,現在準備考研究生沒有什么時間學c#好郁悶。但是還是不舍得完全的放棄,還是有節制的學吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 四会市| 连城县| 贵德县| 娱乐| 定结县| 柘荣县| 普兰县| 鹤岗市| 青冈县| 承德市| 红桥区| SHOW| 申扎县| 册亨县| 韶关市| 静乐县| 游戏| 集贤县| 德庆县| 庆城县| 兴义市| 黑山县| 武汉市| 同仁县| 吴忠市| 新昌县| 辽宁省| 吉安市| 东光县| 景宁| 阳江市| 山丹县| 平安县| 凤凰县| 徐州市| 蕉岭县| 南宁市| 洪湖市| 凤台县| 元朗区| 望城县|