关于DataRow的RowState和RowVersion
1)什么是DataRow's RowState and RowVersion?
DataRow's RowState是数据行的状态,RowVersion是数据行的版本。
RowState and Row Version are both enum object.
The codesnap is the following detail:
2) 究竟RowState和RowVersion有什么关系呢?又个有什么用途呢?
RowState和RowVersion有一个对照关系(或许描述有点不恰当),
关系如下所示:
| RowState | RowVersion |
| Added | Current(Default) |
| Modified | Current(Default) |
| Original | |
| Unchanged | Current(Default) |
| Original(Default) | |
| Detached | Proposed(Default) |
| Deleted | Original (Default) |
从上面的表格可以看出,一个数据行有版本的控制,为什么要有这版本控制呢?
A)用于DataSet和DataTable内部实现,
B)
在用DataAdapter跟DB交互时(Call Update(DataSet)),用什么版本赋值。
当然只是在DBParameter上设置SourceVersion
3) 在DataTable.Select()和DataView.RowStateFilter区别,
public DataRow[] Select ( filterExpression, sort, DataViewRowState recordStates )
public this [ DataColumn column, DataRowVersion version ] { get; }
public DataViewRowState RowStateFilter { get; set; }
其实在性能方面,DataView比DataTable好,DataView use index.
还是回到这个主题上吧,
DataTable的方法会返回所有的版本的数据行,而DataView仅返回相关的版本。
请看下面的例子:
![]()
当直接访问删除的数据时,要用databview,否则会出错:
Deleted row information cannot be accessed through the row.
dataView[i].Row[1,DataRowVersion.Original]
dataView[i]["name"]
也不能用dataView[i].Row[1,DataRowVersion.Default],
对于Unchanged's RowState,如果Call BeginEdit(),没有call EndEdit(),
运行上面的例子,就知道答案了。
(4)在ADO.NET 2.0中,DatRow添加了几个新的方法:
SetAdded()and SetModified()