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

首頁 > 編程 > C# > 正文

C#使用DataSet Datatable更新數據庫的三種實現方法

2020-01-24 02:27:59
字體:
來源:轉載
供稿:網友

本文以實例形式講述了使用DataSet Datatable更新數據庫的三種實現方法,包括CommandBuilder 方法、DataAdapter 更新數據源以及使用sql語句更新。分享給大家供大家參考之用。具體方法如下:

一、自動生成命令的條件 CommandBuilder 方法

a)動態指定 SelectCommand 屬性

b)利用 CommandBuilder 對象自動生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。

c)為了返回構造 INSERT、UPDATE 和 DELETE 。SQL CommandBuilder 必須執行 SelectCommand。

即:必須額外經歷一次到數據源的行程,這可能會降低性能。這也是自動生成命令的缺點。

d)SelectCommand 還必須返回至少一個主鍵或唯一列.

當CommandBuilder和DataAdapter關聯時,就會自動生成DeleteCommand、InsertCommand 和 UpdateCommand中為空的命令。即不空的不生成。

e)必須是一個表,SELECT的不能是多個表的聯合。

動生成命令的規則:

在數據源處為表中所有 RowState 為 Added 的行插入一行(不包括標識、表達式或時間戳等列)。
為 Modified 的行更新行(列值匹配行的主鍵列值) 。
Deleted 的行刪除行(列值匹配行的主鍵列值).這就是為什么要求條件c.d

注意:

a)因為從SELECT數據到UPDATE數據,中間這段時間有可能別的用戶已經對數據進行了修改。自動生成命令這種UPDATE只對在行包含所有原始值并且尚未從數據源中刪除時更新。

b)自動命令生成邏輯為獨立表生成 INSERT、UPDATE 或 DELETE 語句,而不考慮與數據源中其他表的任何關系。因此,當調用 Update 來為參與數據庫中外鍵約束的列提交更改時,可能會失敗。若要避免這一異常,請不要使用 CommandBuilder 來更新參與外鍵約束的列,而應顯式地指定用于執行該操作的語句。

下面是自動生成命令的例子

// Assumes that connection is a valid SqlConnection object.SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM dbo.Customers", connection);SqlCommandBuilder builder = new SqlCommandBuilder(adapter);builder.QuotePrefix = "[";builder.QuoteSuffix = "]";DataSet custDS = new DataSet();connection.Open();adapter.Fill(custDS, "Customers");// Code to modify data in the DataSet here.// Without the SqlCommandBuilder, this line would fail.adapter.Update(custDS, "Customers");connection.Close();

二、使用 DataAdapter 更新數據源

需要注意:

a)如果 SelectCommand 返回 OUTER JOIN 的結果,則 DataAdapter 不會為生成的 DataTable 設置 PrimaryKey 值。您必須自己定義PrimaryKey 以確保正確解析重復行.

b)如果對 DataSet、DataTable 或 DataRow 調用 AcceptChanges,則將使 DataRow 的所有 Original 值都將被重寫為該 DataRow 的 Current 值。如果已修改將該行標識為唯一行的字段值,那么當調用 AcceptChanges 后,Original 值將不再匹配數據源中的值。

看看下面例子:

// Assumes connection is a valid SqlConnection.SqlDataAdapter dataAdpater = new SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", connection);dataAdpater.UpdateCommand = new SqlCommand("UPDATE Categories SET CategoryName = @CategoryName " +"WHERE CategoryID = @CategoryID" , connection);dataAdpater.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int);parameter.SourceColumn = "CategoryID";parameter.SourceVersion = DataRowVersion.Original;DataSet dataSet = new DataSet();dataAdpater.Fill(dataSet, "Categories");DataRow row = dataSet.Tables["Categories"].Rows[0];row ["CategoryName"] = "New Category";dataAdpater.Update(dataSet, "Categories");

插入、更新和刪除的排序

在許多情況下,以何種順序向數據源發送通過 DataSet 作出的更改是相當重要的。
例如,如果已更新現有行的主鍵值并且添加了具有新主鍵值的新行,則務必要在處理插入之前處理更新。

可以使用 DataTable 的 Select 方法來返回僅引用具有特定 RowState 的 DataRow 數組。然后可以將返回的 DataRow 數組傳遞到 DataAdapter 的 Update 方法來處理已修改的行。通過指定要更新的行的子集,可以控制處理插入、更新和刪除的順序。

示例如下:

DataTable table = dataSet.Tables["Customers"];// First process deletes.adapter.Update(table.Select(null, null, DataViewRowState.Deleted));// Next process updates.adapter.Update(table.Select(null, null, DataViewRowState.ModifiedCurrent));// Finally, process inserts.adapter.Update(table.Select(null, null, DataViewRowState.Added));

三、使用sql語句更新

例如:

cmd = new OleDbCommand(string.Format(@"insert into worker(workerid,workername,password,phoneno) values ('{0}','{1}','{2}','{3}') ", textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text),oc);oc.Open();try{ int i = cmd.ExecuteNonQuery();}catch (Exception ex){}

性能的優劣及使用的情形,還未完全明白。

一般的,綁定bindingsource,用datatable綁定bindingsource (實質上綁定的是datatable。defaultview,同時可用到dataview的篩選功能,但是在篩選完后,filter要重置為null,否則出現的一直是經過篩選的數據)

其他:

使用builder 的作用:

OleDbCommandBuilder cb = new OleDbCommandBuilder(da);

這個主要是為了讓C#自動為OleDbDataAdapter da生成相對應的DeleteCommand,UpdateCommand!

希望本文所述對大家的C#數據庫程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品电影久久久| 日韩av手机在线观看| 欧美视频13p| 久久偷看各类女兵18女厕嘘嘘| 久久中文字幕国产| 精品亚洲男同gayvideo网站| 伦理中文字幕亚洲| 国产精品久久久久久久av大片| 精品久久久久久久中文字幕| 久久精品99久久香蕉国产色戒| 国产精品99久久久久久www| 日韩电影网在线| 亚洲成人性视频| 国产视频精品免费播放| 国产精品视频精品视频| 青草热久免费精品视频| 亚洲激情自拍图| 91国语精品自产拍在线观看性色| 亚洲自拍中文字幕| 亚洲午夜小视频| 深夜精品寂寞黄网站在线观看| 久久av.com| 亚洲欧洲一区二区三区在线观看| 国产欧洲精品视频| 久色乳综合思思在线视频| 亚洲精品久久久久中文字幕欢迎你| 欧美日韩中文字幕综合视频| 久久久久久久一区二区三区| 久久精品成人欧美大片| 久久99精品视频一区97| 91成人国产在线观看| 日韩免费观看高清| 亚洲精品av在线| 51视频国产精品一区二区| 亚洲999一在线观看www| 欧美性猛交xxxx偷拍洗澡| 久久福利视频网| 日本精品免费观看| 91免费在线视频网站| 欧日韩在线观看| 亚洲影院色在线观看免费| 91日本在线视频| 久久久久久97| 国产精品久久婷婷六月丁香| 久久久99免费视频| 欧美性生交大片免费| 亚洲一区二区三区久久| www高清在线视频日韩欧美| 日韩在线视频播放| xvideos国产精品| 国产99在线|中文| 狠狠操狠狠色综合网| 亚洲欧美精品suv| 亚洲女人被黑人巨大进入| 亚洲成人黄色在线| yw.139尤物在线精品视频| 在线播放日韩精品| www.欧美三级电影.com| 国产精品尤物福利片在线观看| 色综合久久88| 精品自拍视频在线观看| 欧美电影免费看| 欧美国产激情18| 成人av番号网| 亚洲综合色av| 欧美一区二区影院| 狠狠久久五月精品中文字幕| 国产精品羞羞答答| 啪一啪鲁一鲁2019在线视频| 亚洲最新av在线| 欧美与欧洲交xxxx免费观看| 日韩精品中文字| 国产精品入口日韩视频大尺度| 欧美成人自拍视频| 国产精品旅馆在线| 在线色欧美三级视频| 久久成人这里只有精品| 91九色视频在线| 国产中文日韩欧美| 久久亚洲精品一区二区| 亚洲视频在线观看网站| 欧美色图在线视频| 亚洲社区在线观看| 亚洲精品www| 欧美精品制服第一页| 亚洲黄色成人网| 美日韩精品免费观看视频| 久久视频在线播放| 国产成人精品综合久久久| 一本一道久久a久久精品逆3p| 日韩成人性视频| 日韩av一卡二卡| 欧美激情精品久久久久久变态| 九九视频这里只有精品| 国产日韩欧美中文| 日韩免费av片在线观看| 色偷偷噜噜噜亚洲男人的天堂| 国产日韩在线观看av| 88国产精品欧美一区二区三区| 第一福利永久视频精品| 亚洲美女在线视频| 美女精品久久久| 久久夜色精品亚洲噜噜国产mv| 伊人久久综合97精品| 日韩av在线直播| www.日韩av.com| 伊人伊人伊人久久| 97久久伊人激情网| 亚洲成人网在线| 亚洲国产精品福利| 一区二区成人精品| 欧美洲成人男女午夜视频| 日韩美女写真福利在线观看| 国产在线拍揄自揄视频不卡99| www.日韩.com| 欧美色道久久88综合亚洲精品| 色偷偷av一区二区三区| 日韩美女视频中文字幕| 国产精品爽黄69天堂a| 午夜精品免费视频| 自拍偷拍亚洲在线| 亚洲欧美另类自拍| 亚洲精品资源在线| 美女福利精品视频| 久久精品视频播放| 欧美成人亚洲成人日韩成人| 亚洲第一中文字幕| 91久久精品日日躁夜夜躁国产| 日韩亚洲综合在线| 亚洲国产欧美一区二区三区久久| 亚洲成人av在线| 久久久久久久97| 欧美在线视频a| 欧美日韩国产精品一区二区三区四区| 一本色道久久88亚洲综合88| 中文字幕久热精品在线视频| 欧美xxxx18性欧美| 国产精品视频网站| 日韩精品视频观看| 在线观看视频99| 日韩成人在线网站| 8x海外华人永久免费日韩内陆视频| 国产日韩精品视频| 国产精品久久久久久av下载红粉| 久热精品视频在线观看| 色婷婷综合久久久久| 日韩av免费在线观看| 中文字幕在线观看亚洲| 久久精品视频一| 亚洲人成电影网站色www| 欧美黑人极品猛少妇色xxxxx| 日韩性生活视频| 欧美中文在线观看国产| 国产福利精品视频| 国模精品系列视频| 日韩av电影在线播放| 欧美一级电影久久| 中文在线不卡视频| 亚洲成人精品av| 一区二区亚洲精品国产| 国产精品视频区| 欧美视频在线观看免费网址| 久久露脸国产精品| 久久综合免费视频|