1)什么是DataRow's RowState and RowVersion?
DataRow's RowState是数据行的状态,RowVersion是数据行的版本。
RowState and Row Version are both enum object.
The codesnap is the following detail:
DataRowState
[Flags]
public enum DataRowState
{
Added = 4,
Deleted = 8,
Detached = 1,
Modified = 0x10,
Unchanged = 2
}
RowVersion
public enum DataRowVersion
{
Current = 0x200,
Default = 0x600,
Original = 0x100,
Proposed = 0x400
}
2)在DataRow的不同RowState下取不同RowVersion的值会是怎样的哪,我们通过下面的代码进行测试:
Code
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace DataRowRowStateAndRowVersion
10{
11 public partial class Form1 : Form
12 {
13 public Form1()
14 {
15 InitializeComponent();
16 }
17
18 private void button1_Click(object sender, EventArgs e)
19 {
20 DataTable dt = new DataTable();
21 DataColumn dc = new DataColumn("value",typeof(string));
22 dt.Columns.Add(dc);
23 dc = new DataColumn("name",typeof(string));
24 dt.Columns.Add(dc);
25
26 //0
27 DataRow dr = dt.NewRow();
28 dr["value"] = "value";
29 dr["name"] = "Deleted";
30 dt.Rows.Add(dr);
31
32 //1
33 dr = dt.NewRow();
34 dr["value"] = "value";
35 dr["name"] = "Modified";
36 dt.Rows.Add(dr);
37
38 //2
39 dr = dt.NewRow();
40 dr["value"] = "value";
41 dr["name"] = "Unchanged";
42 dt.Rows.Add(dr);
43
44 dt.AcceptChanges();
45
46 dt.Rows[0].Delete();
47 dt.Rows[1]["value"] = "modified";
48
49 //3
50 dr = dt.NewRow();
51 dr["value"] = "value";
52 dr["name"] = "Added";
53 dt.Rows.Add(dr);
54
55 //4
56 dr = dt.NewRow();
57 dr["value"] = "value";
58 dr["name"] = "Detached";
59 }
60 }
61}
3) 测试结果:
4)结果分析:
DataRow在Deleted RowState状态下只有Original DataRowVersion的值可以访问,访问其他版本的的值都会引发异常。
只有在Detached状态下可以访问Proposed和Default版本的值,其他状态下访问Proposed的值将引发异常。
Current版本的值在Deleted和Detached状态下访问会引发异常。
5)相关链接
关于DataRow的RowState和RowVersion