强类型DataSet的数据并发控制

 private void Form1_Load(object sender, EventArgs e)
  {
            studentTableAdapter ada = new DataSet1TableAdapters.studentTableAdapter();          
            ada.Fill(this.ds1.student);
            ada.Fill(this.ds2.student);          
 }
private void buttonX1_Click(object sender, EventArgs e)
{
            try
            {
                var s1 = this.ds1.student.First();
                s1.姓名 = "张三5";
                var s2 = this.ds2.student.First();
                s2.姓名 = "张三5";
                studentTableAdapter ada = new studentTableAdapter();
                ada.Update(this.ds1.student);
                ada.Update(this.ds2);  //在这句会产生并发错误异常
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}

 

如上图,强类型DataSet,默认启用“使用开放式并发”,并发控制级别是到行的,例如dataset装载了三行数据,

1、在数据库中更改第一行数据,然后在代码中更改第二行数据 , 然后再存库,程序不报错,第二行数据会被程序改变

2、在数据库中更改第一行数据,然后在代码中更改第一二行数据,然后存库,程序报错,两行数据都不会被程序改变

3、在数据库中更改第二行数据,然后在代码中更改第一二行数据,然后存库,程序报错,第一行数据会被程序改变,第二行则不会被程序改变

4、如果在dataset中包含了多个表的数据,则表之间的控制,遵循类似于行的规则。

  public TestDataSet LookUp()
        {
            TestDataSet ds = new TestDataSet();
            this.adasstu.Fill(ds.student);
            this.adates.Fill(ds.teacher);
            return ds;
        }
        public void Update(TestDataSet ds)
        {
            if (ds.HasChanges())
            {
                this.adates.Update(ds.teacher);//因为在student更新前更新,student表更新发生错误,不会影响teacher表的更新
                this.adasstu.Update(ds.student);//因为在teacher更新后更新,teacher表更新发生错误,会影响student表的更新
                ds.AcceptChanges();
            }
        }
View Code

 

posted @ 2016-09-14 09:33  新进社员  阅读(269)  评论(0)    收藏  举报