理解解析ADO.NET 批處理返回值
ADO.NET 批處理更新只是一個(gè)用來(lái)簡(jiǎn)化多個(gè)行更新提交的客戶端提供的軟件機(jī)制。在任何情況下,每個(gè)新行提交總是通過(guò)數(shù)據(jù)源直接命令的正常通道完成的。將運(yùn)行一個(gè)預(yù)定義的直接 SQL 命令。從本質(zhì)上來(lái)說(shuō),這就是批處理更新。
ADO.NET 批處理更新通過(guò)數(shù)據(jù)適配器對(duì)象的 “更新” 方法進(jìn)行。數(shù)據(jù)只能以每個(gè)表為基礎(chǔ)進(jìn)行提交。如果您調(diào)用 “更新” 時(shí)沒(méi)有指定表名,則使用 Table 這個(gè)默認(rèn)的表名。如果不存在具有該名稱的表,則會(huì)產(chǎn)生異常。#t#
“更新” 首先檢查每個(gè)表行的 RowState 屬性,然后為所指定表中的每個(gè)插入行、更新行或刪除行準(zhǔn)備自定義的 INSERT、UPDATE 或 DELETE 語(yǔ)句?!案隆?方法有幾個(gè)超載。它可以采用數(shù)據(jù)集和數(shù)據(jù)表提供的對(duì)、某個(gè)數(shù)據(jù)表、甚至是一個(gè) DataRow 對(duì)象數(shù)組。該方法會(huì)返回一個(gè)整數(shù)值,即成功更新的行數(shù)。
為了最大限度地減少網(wǎng)絡(luò)通信,ADO.NET 批處理通常會(huì)對(duì)正在操作的數(shù)據(jù)集的一個(gè)子集調(diào)用 “更新”。毫無(wú)疑問(wèn),這個(gè)子集只包含當(dāng)時(shí)已修改的行。您可以通過(guò)調(diào)用數(shù)據(jù)集的 GetChanges 方法來(lái)獲得這樣的子集。
- if (ds.HasChanges())
- {
- DataSet dsdsChanges = ds.GetChanges();
- adapter.Update(dsChanges, "MyTable");
- }
另外,您可以使用 HasChanges 方法檢查數(shù)據(jù)集是否發(fā)生了更改。HasChanges 返回一個(gè)布爾值。
ADO.NET 批處理 返回的數(shù)據(jù)集包含當(dāng)時(shí)已插入、刪除或修改的行。但這里所說(shuō)的當(dāng)時(shí)是什么時(shí)間呢?這正是 ADO.NET 批處理更新比較復(fù)雜的一個(gè)方面,必須與表行的當(dāng)前狀態(tài)一起處理。