如何進(jìn)行ADO.NET 批處理使用
本文介紹ADO.NET 批處理表示一種指示參數(shù)值的間接方式。您可以使用列名設(shè)置 SourceColumn 屬性,并且使批處理更新機(jī)制不時(shí)地提取有效值,而不是使用 Value 屬性來進(jìn)行調(diào)試。
“數(shù)據(jù)表” 中的每一行都是通過 DataRow 對(duì)象呈現(xiàn)的。DataRow 對(duì)象主要是作為父 “數(shù)據(jù)表” 對(duì)象的 Rows 集合的一個(gè)元素而存在的。從概念上來看,數(shù)據(jù)庫行固有地鏈接到了某個(gè)給定表的結(jié)構(gòu)。就是由于這個(gè)原因,ADO.NET 中的 DataRow 類不提供公用構(gòu)造函數(shù)。
創(chuàng)建新 DataRow 對(duì)象的唯一方式是借助于對(duì) “數(shù)據(jù)表” 對(duì)象的某個(gè)實(shí)時(shí)實(shí)例調(diào)用名為ADO.NET 批處理的方法。剛剛創(chuàng)建好的行還不屬于父表的 Rows 集合,但該行與此集合的關(guān)系決定了該行的狀態(tài)。下表顯示了 RowState 屬性的一些可取值。這些值組合在了 DataRowState 枚舉中。
每一行的 ADO.NET 批處理 屬性都會(huì)影響 HasChanges 方法的返回值以及 GetChanges 返回的子數(shù)據(jù)集的內(nèi)容。#t#
從這些可取值的范圍可以看出,RowState 的值主要取決于對(duì)行已經(jīng)執(zhí)行的操作。ADO.NET 批處理表基于兩個(gè)方法 - AcceptChanges 和 RejectChanges - 來實(shí)現(xiàn)類似事務(wù)處理的提交模型。從數(shù)據(jù)源下載表時(shí)或在內(nèi)存中新建表時(shí),所有行都是沒有更改的。您輸入的所有更改不會(huì)立即變?yōu)橛谰眯愿?,隨時(shí)都可以通過調(diào)用 RejectChanges 來回滾更改。您可以在三個(gè)級(jí)別調(diào)用 RejectChanges 方法:
在數(shù)據(jù)集級(jí)別上可拒絕所有更改(無論是什么更改)。
◆在數(shù)據(jù)表級(jí)別上可取消某個(gè)表中的所有更改。
◆在某個(gè)特定的行級(jí)別上可還原到該行以前的狀態(tài)。
◆在數(shù)據(jù)集級(jí)別上可拒絕所有更改(無論是什么更改)。
方法 AcceptChanges 能夠提交所有正在進(jìn)行的更改。它使得數(shù)據(jù)集會(huì)將當(dāng)前值接受為新的原始值。因此,ADO.NET 批處理所有掛起的更改都被清除。與 RejectChanges 一樣,也可以對(duì)整個(gè)數(shù)據(jù)集、某個(gè)表或某個(gè)行調(diào)用 AcceptChanges。
當(dāng)您開始一個(gè)ADO.NET 批處理更新操作時(shí),只會(huì)考慮提交那些標(biāo)記為 Added、Deleted 和 Modified 的行。如果您恰好在批處理更新之前調(diào)用了 AcceptChanges,則對(duì)數(shù)據(jù)源不進(jìn)行任何持久更改。