C#批量修改Acess事务控制
c#用OleDbCommand批量更新Access中的一个表中的部份记录,启用Transaction了事务,但在更新的过程中事务锁定的是整张表,而不仅仅是更新的那些数据,且更新过程中(启用Transaction后,还没有提交和回滚之前),向表中插入记录时,提示被锁定。
同样的代码在另一个程序中运行后却没有问题,代码如下:
public static bool UpdateByIDEx(Tb_TC[] entitys, out System.Data.OleDb.OleDbTransaction Transaction)
{
System.Data.OleDb.OleDbCommand objUpdateCommand = CreateUpdateCommand();
objUpdateCommand.Connection.Open();
Transaction = objUpdateCommand.Connection.BeginTransaction(IsolationLevel.ReadCommitted);
objUpdateCommand.Transaction = Transaction;
for (int i = 0; i < entitys.Length; i++)
{
string sql = string.Format("Update Tb_TC set bJY={0},dtSYJSRQ=#{1}#,dtSYQSRQ=#{2}#,dtXSJSRQ=#{3}#,dtXSQSRQ=#{4}#,fTCFY={5},sBH=\'{6}\',sDGUID=\'{7}\',sSM=\'{8}\',sTCLY=\'{9}\' where sGUID=\'{10}\'",
entitys[i].bJY, entitys[i].dtSYJSRQ, entitys[i].dtSYQSRQ, entitys[i].dtXSJSRQ, entitys[i].dtXSQSRQ, entitys[i].fTCFY, entitys[i].sBH, entitys[i].sDGUID, entitys[i].sSM,entitys[i].sTCLY,entitys[i].sGUID);
objUpdateCommand.CommandText = sql;
objUpdateCommand.ExecuteNonQuery();
}
}
当程序运行到:objUpdateCommand.ExecuteNonQuery();时整个表就锁定了,必须提交或回滚后,其它程序才能对这个表进行操作
------解决方案--------------------有什么问题吗?因该是锁定吧。
------解决方案--------------------事务有四大特性:原子性,一致性,隔离性,持续性