现在的位置: 首页 > 综合 > 正文

ADO.Net问题—DataAdapter Update 违反并发性

2013年01月17日 ⁄ 综合 ⁄ 共 723字 ⁄ 字号 评论关闭

1,        在多个线程中同时用Adapter更新一个DataTable:

     tbReferTableAdapter tbAdapter = new tbReferTableAdapter();                    
     tbAdapter.Update(dataSetRefer.tbRefer);                                 //更新到数据库,tbRefer是datatable中的一张表。

遇到如下错误: throws DBConcurrencyException 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。 

        在我写的程序中,是因为当用DataSet来更新数据库时,若DataSet对应数据库中数据被其他线程改变,引发DBConcurrencyException.

解决办法如下:

     tbReferTableAdapter tbAdapter = new tbReferTableAdapter();
     tbAdapter.Update(dataSetRefer.tbRefer);                              //更新到数据库,tbRefer是datatable中的一张表 
     tbAdapter.Fill(dataSetRefer.tbRefer);                                //把内存中的数据和数据库保持一致,解决问题!

2,在把DataRow[] (dr)转换成Datatable(dt)时,出现“该行已经属于另一个表”错误!


for(int i=0;i<dr.Length;i++)
{
     //将数组元素加入表...
      dt.Rows.Add(dr[i]);//出错提示为:该行已经属于另一个表
}

解决办法如下:

for(int i=0;i<dr.Length;i++)
{
	//将数组元素加入表...
	dt.Rows.Add(dr[i].ItemArray);//解决问题!

}解决方法


抱歉!评论已关闭.