首先很抱歉我的英语不好,但我会尽力而为。
现在我正在编写一个使用 Access 2007 作为数据存储的 .net 应用程序。
简而言之:我有两个线程。一个线程将带有事务的行插入到表中。另一个线程以恒定的时间间隔更新许多行。
线程 1
Database db = _loggingDatabase;
using (DbConnection conn = db.CreateConnection())
{
conn.Open();
DbTransaction txn = conn.BeginTransaction();
try
{
string qryInsert = "Insert this";
DbCommand cmdIns = db.GetSqlStringCommand(qryInsert);
db.ExecuteNonQuery(cmdIns, txn);
txn.Commit();
}
catch (Exception ex)
{
txn.Rollback();
throw ex;
}
finally
{
conn.Close();
}
线程 2
Database db = _loggingDatabase;
using (DbConnection conn = db.CreateConnection())
{
conn.Open();
DbTransaction txn = conn.BeginTransaction();
try
{
string qryUpdate = "Update that";
DbCommand cmdUpdt = db.GetSqlStringCommand(qryUpdate);
db.ExecuteNonQuery(cmdUpdt, txn);
txn.Commit();
}
catch (Exception ex)
{
txn.Rollback();
throw ex;
}
finally
{
conn.Close();
}
如果我触发插入许多记录,我会得到一个 System.Data.OleDb.OleDbException,上面写着:“无法更新;当前锁定”。我试图将连接字符串更改为
connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=datastore.accdb; Jet OLEDB:Database Locking Mode=1;"
对我的应用程序行为没有影响。我决定使用这些事务来避免混乱的插入和更新。
有解决方法吗?我究竟做错了什么?我可以将我的事务插入到某种事务队列到 Access 中吗?为什么 Access 不自行执行此操作?