在《数据集DataSet数据管理(DataAdapter查询更新数据库)》一文中提到可以使用OleDbDataAdapter对象的Update方法还可将对 DataSet 所做的更改解析回数据源,实例化OleDbDataAdapter对象时必须设置InsertCommand、 UpdateCommand或 DeleteCommand属性。那么OleDbDataAdapter对象是如何知道DataSet 数据集中哪些数据是要插入的、哪些是更改过的、而哪些又是需要删除的呢?
ADO.NET 用行状态和行版本管理表中的行。 行状态指示行的状态;行版本在修改行中存储的值时维护各个阶段的值,包括当前值、原始值和默认值。
一、行状态
(一)、RowState枚举
每个 DataRow 对象都具有 RowState 属性,您可以检查此属性来确定行的当前状态。只要该行中某一个字段发生改变,那么这一行对应的RowState属性就会发生改变。RowState是一个枚举,其中包含5个内容:
1、Unchanged
自上次调用 AcceptChanges 以来或由 DataAdapter.Fill 创建该行以来,没有进行任何更改。——原来的行!
2、Added
已将该行添加到表中,但尚未调用 AcceptChanges。——插入的新行!
3、Modified
已更改了行的某个元素。——刚被修改过的行!
4、Deleted
已从表中删除该行,并且尚未调用 AcceptChanges。——刚被删除的行(注意:这里只是从内存表中删除,准确的说是该行只是被做了Deleted标志并没有真的删除,物理数据表中更是没有删除,所以此时你无法直接去访问该行的某个字段的内容!)。
5、Detached
该行不是表中的行——该行不是任何 DataRowCollection 的一部分。 新创建的行、或者已经被Remove或者RemoveAt、或者Delete之后调用过AcceptChanges方法的行、或者是WinForm控件DataGridView默认设置下最后那个永远也留出的空行……都被自动设置该状态。这种状态表示已初始化但未添