日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataSet 的 Merge 方法

發(fā)布時間:2024/9/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataSet 的 Merge 方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

是MSDN中對Merge方法使用說明:

Merge 方法用于合并架構(gòu)大致相似的兩個 DataSet 對象。合并在客戶端應(yīng)用程序上通常用于將數(shù)據(jù)源中最近的更改合并到現(xiàn)有的 DataSet 中。這使客戶端應(yīng)用程序能夠擁有用數(shù)據(jù)源中的最新數(shù)據(jù)刷新的 DataSet。通常在一系列過程的末尾調(diào)用 Merge 方法,這些過程涉及驗證更改、消除錯誤、使用更改更新數(shù)據(jù)源并最后刷新現(xiàn)有的 DataSet。 在客戶端應(yīng)用程序中,通常有這樣一個按鈕,用戶可以單擊它來收集已更改的數(shù)據(jù)并對其進行驗證,然后將其發(fā)送回中間層組件。在這種情況下,將首先調(diào)用 GetChanges 方法。該方法返回另一個為驗證和合并而優(yōu)化的 DataSet。第二個 DataSet 對象只包含已更改的 DataTable 和 DataRow 對象,結(jié)果產(chǎn)生初始 DataSet 的子集。該子集通常較小,因此可以更有效率地傳遞回中間層組件。然后,中間層組件將通過存儲過程使用更改更新初始數(shù)據(jù)源。然后,中間層可以發(fā)送回一個新的 DataSet,其中包含數(shù)據(jù)源中的初始數(shù)據(jù)和最新數(shù)據(jù)(通過再次運行初始查詢);或者它可以發(fā)送回包含從數(shù)據(jù)源對其進行的所有更改的子集。(例如,如果數(shù)據(jù)源自動創(chuàng)建唯一主鍵值,則可以將這些值傳播回客戶端應(yīng)用程序。)在哪一種情況下都可以使用 Merge 方法將返回的 DataSet 合并回客戶端應(yīng)用程序的初始 DataSet。 當(dāng)將新的源 DataSet 合并到目標(biāo)中時,DataRowState 值為 Unchanged、Modified 或 Deleted 的任何源行都會與具有同一主鍵值的目標(biāo)行相匹配。DataRowState 值為 Added 的源行將匹配主鍵值與新源行相同的新目標(biāo)行。

根據(jù)以上說明,我們知道Merge方法在合并兩個數(shù)據(jù)集時,是以行的主鍵值為主要對比參照。這樣在向數(shù)據(jù)集添加新行時不會有任何問題,在修改了行且不修改主鍵值的情況下也不會有問題,但是在更改行時如果你修改了主鍵的值,那問題就來了…… 下面我們就舉例說明:

在SQL Server下的一個Products表結(jié)構(gòu)如下:

在SQL Server下的一個Products表結(jié)構(gòu)如下:

列名

數(shù)據(jù)類型

說明

Code

nchar

產(chǎn)品代碼(主鍵列)

Name

nvarchar

產(chǎn)名名稱

UnitPrice

numeric

產(chǎn)品單價

在.NET中使用XSD生成一個對應(yīng)的ProductsData.xsd結(jié)構(gòu)如下:

列名

數(shù)據(jù)類型

說明

Code

string

產(chǎn)品代碼(主鍵列)

Name

string

產(chǎn)名名稱

UnitPrice

decimal

產(chǎn)品單價

根據(jù)MSDN的說明,我們在前臺通過ProductsData添加或修改數(shù)據(jù)后在提交后臺更新時,通常做法如下:

??????? // 創(chuàng)建一個新數(shù)據(jù)集來保存對主數(shù)據(jù)集所做的更改

??????? ProductsData dataSetChanges;

??????? dataSetChanges = (ProductsData)(productsData.GetChanges());

??????? // 檢查是否做了任何更改

??????? if(dataSetChanges != null) {

??????????? try {

??????????????? // 需要做一些更改,所以嘗試通過調(diào)用 update 方法

// 和傳遞數(shù)據(jù)集以及任何參數(shù)來更新數(shù)據(jù)源

??????????????? UpdateDataSource(dataSetChanges);

??????????????? productsData.Merge(dataSetChanges);

??????????????? productsData.AcceptChanges();

??????????? }

??????????? catch (System.Exception eUpdate) {

??????????????? throw eUpdate;

??????????? }

??????? }

以上代碼是根據(jù)VS.NET的數(shù)據(jù)窗體生成向?qū)懙?#xff0c;依據(jù)以上代碼我們模擬向數(shù)據(jù)集添加一行數(shù)據(jù)并更新后的情況:

Code

Name

UnitPrice

1001

金砂朱古力

120.00

沒問題,下面我們修改這行數(shù)據(jù)再更新,這里我們把Code改為1002,更新之后結(jié)果數(shù)據(jù)并沒有按我們預(yù)想的把原本行Code列的值1001改為1002,而是添加了一行:

Code

Name

UnitPrice

1001

金砂朱古力

120.00

1002

金砂朱古力

130.00

注:通常情況下我們是很少更改主鍵值,但在代碼沒有被使用的情況下,一般是允許更改Code的,特別是在系統(tǒng)實施的階段。

出現(xiàn)以上問題的原因其實不奇怪,按Merge方法的原理,這一點也沒錯,但這是我們不希望的結(jié)果,怎么解決呢,難道不允許用戶更改主鍵,但好象不符合實際。怎么解決呢?

既然要用Merge方法,那只有依Merge合并數(shù)據(jù)的原理去做,不讓改主鍵我們就不改主鍵,我們可以給前臺的ProductsData的數(shù)據(jù)集加多一個額外的主鍵ID列,并把它的AutoIncrement設(shè)為true,將原本的主鍵列Code改為Key列,至于后臺SQL Server中的源表不作任何修改,修改后如下:

列名

數(shù)據(jù)類型

說明

ID

Int

自動增長列 (主鍵)

Code

String

產(chǎn)品代碼?? (key 鍵)

Name

String

產(chǎn)名名稱

UnitPrice

decimal

產(chǎn)品單價

經(jīng)這樣一改,由于ID是自動一個自遞增列,我們并不去修改它的值,這樣我們就可以隨意更改 Code 列的值了,Merge 方法在合并數(shù)據(jù)時由于是依據(jù)ID例進行比對所以也不會再出現(xiàn)前面加多一行的問題了。

總結(jié)

以上是生活随笔為你收集整理的DataSet 的 Merge 方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爱爱免费小视频 | 欧美国产精品一区二区 | wwwxxxx国产| 无码精品人妻一区二区三区影院 | 激情五月婷婷综合 | 国产精品无码乱伦 | 国产精品久久国产精品 | 四季av一区二区三区免费观看 | 日本欧美日韩 | 免费亚洲婷婷 | 一级全黄裸体免费视频 | 五月网站| 91老师国产黑色丝袜在线 | 91精品免费在线 | 精品无码黑人又粗又大又长 | 黄色激情av | 日本少妇b| 色婷婷在线影院 | 中文字幕在线日韩 | avtt在线观看 | 国产在线中文字幕 | 被警察猛c猛男男男 | 欧美3p在线观看 | 亚洲最大成人在线 | 奇米影视在线观看 | 一级特黄aa大片免费播放 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 亚洲一区二区免费看 | 日韩精品一区二区三区不卡在线 | 欧美性做爰猛烈叫床潮 | 91视频一区二区 | 日韩美女激情视频 | 99久久精品免费视频 | av片观看| 任你操精品视频 | 成人动漫中文字幕 | 熟女人妻一区二区三区免费看 | 日日爽视频 | 亚洲第一色视频 | 深夜久久| 日本一区二区三区免费在线观看 | 国产顶级毛片 | 九九精品视频免费 | 亚欧精品在线 | 欧美性第一页 | 男女黄床上色视频 | 肉丝美足丝袜一区二区三区四 | 亚洲成人播放器 | 日本黄色一区 | av中文字幕网站 | 神马午夜嘿嘿 | 日本性视频网站 | 亚洲资源av| 国产真人无遮挡作爱免费视频 | 亚洲黄色av网站 | 黄色动漫在线免费观看 | 久久大片 | 免费在线观看黄色av | 国产污片在线观看 | 温柔少妇的高潮呻吟 | 亚洲激情成人 | 天天综合一区 | 精品无码免费视频 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 亚洲裸体网站 | 伊人超碰在线 | 浪浪视频污| 大又大粗又爽又黄少妇毛片 | 人人澡超碰碰 | 午夜视频欧美 | 国产精品久久久久久久一区探花 | 在线视频日韩欧美 | 精品第一页 | 四虎影裤| 精产国产伦理一二三区 | 女女互磨互喷水高潮les呻吟 | 国产无码精品在线播放 | 天天插天天插 | 西西人体大胆4444ww张筱雨 | 久久天堂网 | 中文字幕av观看 | 女同性αv亚洲女同志 | 女女同性女同一区二区三区九色 | 国产成人自拍视频在线观看 | 熟妇人妻中文字幕无码老熟妇 | 久久精品国产亚洲AV黑人 | 麻豆久久久久久久久久 | 少妇一级淫片免费播放 | 日韩欧美三级视频 | www.我爱av| 青青一区二区 | 91精品又粗又猛又爽 | 无码人妻一区二区三区在线 | h成人在线| 亚洲第一av在线 | avtt亚洲天堂 | 久久天堂网 | 亚洲人成网站999久久久综合 | 日本一区二区不卡在线观看 |