日期:2014-05-18  浏览次数:21366 次

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();时整个表就锁定了,必须提交或回滚后,其它程序才能对这个表进行操作

------解决方案--------------------
有什么问题吗?因该是锁定吧。
------解决方案--------------------
事务有四大特性:原子性,一致性,隔离性,持续性