强类型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(); } }

浙公网安备 33010602011771号