在本机读写accese数据库发生并发冲突,第二个this.oleDbDataAdapter1.Update(。。)时发生;
private void getstandardall()
{
DataTable tempDataTable1 = this.bzjzhbDataTable.Copy();
DataView viewalltemp1 = new DataView(tempDataTable1);
OleDbConnection myConnectionbzjzhb = new OleDbConnection(oleDbConnection1.ConnectionString);
myConnectionbzjzhb.Open();
OleDbCommand myCommandbzjzhb = new OleDbCommand( "DELETE * FROM Standardzhb ", myConnectionbzjzhb);
myCommandbzjzhb.ExecuteNonQuery();
myConnectionbzjzhb.Close();
GoldPrinter.ExcelAccess excel = new GoldPrinter.ExcelAccess();
string path = @ "d:\exb\bzjzhb ";
string result,getbzjggxj,getbzjjs,getbzjclassfy,getbzjparameter,getbzjnb,getbzjnbjj,getbzjPara;
int findi=1,finefh;
try
{
string[] dirs = Directory.GetFiles(@ "d:\exb\bzjzhb ");
foreach (string dir in dirs)
{
getbzjnb=dir.Substring(dir.IndexOf( " ")+1).Substring(0,dir.Substring(dir.IndexOf( " ")+1).IndexOf( "部 "));//dir.IndexOf( "部 " )
excel.Open(dir);
while(findi <500)
{
getbzjggxj=excel.GetCellText(findi, "D " );
getbzjjs=excel.GetCellText(findi, "G " );
if(getbzjggxj.IndexOf( "; ")> 0 || getbzjggxj.IndexOf( "; ")> 0)
{
finefh=getbzjggxj.IndexOf( "; ");
getbzjclassfy=getbzjggxj.Substring(0,finefh);
getbzjparameter=getbzjggxj.Substring(finefh+1,getbzjggxj.Length-finefh-1);
getbzjnbjj=getbzjnb+ "= "+getbzjjs;
getbzjPara=DeelNumberString(getbzjclassfy);
DataRow newRow = tempDataTable1.NewRow();
newRow[2] = getbzjclassfy;
newRow[3] = getbzjggxj;
newRow[4] = getbzjnb;
newRow[5] = getbzjnbjj;
newRow[8]=getbzjPara;
newRow[9] = getbzjparameter;
newRow[0] = Convert.ToInt16(getbzjjs);
tempDataTable1.Rows.Add(newRow);
}
findi=findi+1;
}
findi=1;
}
}
catch (Exception e)
{
Console.WriteLine( "The process failed: {0} ", e.ToString());
}
this.oleDbDataAdapter1.Update(tempDataTable1);
tempDataTable1.AcceptChanges();
myConnectionbzjzhb.Close();
string bzjggxh1= " ",bzjggxh2= " ",nbjj5,nbjj6= " ";
string sqlstr2= " SELECT * FROM Standardzhb ";
OleDbConnection myConnection2 = new OleDbConnection(oleDbConnection1.ConnectionString);
OleDbCommand myCommand2 = new OleDbCommand(sqlstr2, myConnection2);
myConnection2.Open();
OleDbDataReader myReader2 = myCommand2.ExecuteReader(CommandBehavior.CloseConnection);
int k1=0;
while(myReader2.Read())
{
try
{
bzjggxh1=myReader2.GetString(1).ToString();
viewalltemp1.RowFilter = "ggxh like ' " + bzjggxh1 + " ' ";
int i1=0;
foreach(DataRowView drv in viewalltemp1)
drv[ "nbjj "] += " new value ";
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
nbjj6= " ";
k1=k1+1;
}
myReader2.Close();
this.oleDbDataAdapter1.Update(tempDataTable1);//这里出现并发冲突
tempDataTable1.AcceptChanges();
myConnectionbzjzhb.Close();
}
本机一个人用桌面程序竟然并发冲突。
请各位指点迷津,c#我不熟。
[解决办法]
并发冲突在.Net很常见,也不好调整。
49、违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
必须在提交前DataGridView1.EndEdit 提交后Ds.AcceptChanges() '更新数据集
UpdateCommand和DeleteCommand出现DBConcurrencyException异常。调试提示:违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条;或 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条。
这里的违反并发性:不是指多人编辑引起的并发。
问题原因:
在插入、更新或删除操作过程中当受影响的行数等于零时由 DataAdapter 引发的异常。
可能的解决方法:
1 检查是否设有主键。
2 DeleteCommand的问题:检查是否含有自动编号字段(自动编号字段会引发此异常);
UpdateCommand的问题:检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常)。
==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
优惠接单开发,收费带初学者,组件控件定制开发,成品源代码批发
联系方式:Q64180940(请清楚注明业务还是技术咨询) 全天在线
==================================================================