我有一个具有 3 个条件的函数:
- 如果
DataRow rowstate == Added
- 如果
!DataRow HasVersion(DataRowVersion.Original)
- 如果
DataRow rowstate == modified
我的问题是第二个,有人能解释一下吗? 它与第一个条件有何不同?
AcceptChanges()
RowState 将被设置为“ Unchanged ”AcceptChanges()
DataRow 或 DataTable 时,DataRowVersion 将设置为“原始”。您可以说原始意味着所有更改都已被接受。我创建了一个小示例程序,它显示了操作中的变化,以阐明差异。
class Program {
static void Main(string[] args) {
var table = new DataTable("MyTable");
table.Columns.Add(new DataColumn("MyColumn"));
var row = table.NewRow();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Detached
table.Rows.Add(row);
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Added
table.AcceptChanges();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Unchanged
row.BeginEdit();
row[0] = "NewValue";
row.EndEdit();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Modified
if (row.HasVersion(DataRowVersion.Current)) { // Does the row contain uncommited values?
Console.WriteLine($"DataRowVersion: {DataRowVersion.Current}"); //Prints Current
}
table.AcceptChanges(); //Commit all DataRowChanges
if (row.HasVersion(DataRowVersion.Original)) {
Console.WriteLine($"DataRowVersion: {DataRowVersion.Original}"); //Prints Current
}
Console.ReadLine();
}
}
关于DataRowStates的 msdn 文档实际上得到了很好的解释。它提供了关于每个状态的简短说明以及一些示例代码。DataRowVersions 也是如此。你绝对应该看看这两篇文章。
引用链接的 MSDN 文章:
调用 DataRow 对象的 BeginEdit 方法后,如果更改值,则 Current 和 Proposed 值将变为可用。
调用 DataRow 对象的 CancelEdit 方法后,将删除 Proposed 值。
调用 DataRow 对象的 EndEdit 方法后,Proposed 值变为 Current 值。
调用 DataRow 对象的 AcceptChanges 方法后,Original 值与 Current 值相同。
调用 DataTable 对象的 AcceptChanges 方法后,原始值与当前值相同。
调用 DataRow 对象的 RejectChanges 方法后,Proposed 值被丢弃,版本变为 Current。
行状态(已添加、已删除 ..) 行版本(原始、当前、建议)
更新方法使用 Row Version 来决定将哪些更改应用于数据库。如果我们在 TableAdapter 上调用 AcceptChanges 方法 在调用 Update 方法之前:当前版本将是原始版本 所以你不应该在调用 Update 方法之前调用 ACCEPTCHANGES 方法