最初は英語が下手でごめんなさい。でも頑張ります。
現在、Access2007をデータストアとして使用して.netアプリケーションをプログラミングしています。
一言で言えば:私は2つのスレッドを持っています。1つのスレッドは、トランザクションを含む行をテーブルに挿入します。他のスレッドは、一定の間隔で多くの行を更新します。
スレッド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をに変更しようとしました
connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=datastore.accdb; Jet OLEDB:Database Locking Mode=1;"
アプリケーションの動作には影響しません。混沌とした挿入と更新を避けるために、これらのトランザクションを使用することを説明しました。
回避策はありますか?私は何が間違っているのですか?ある種のトランザクションキューへのトランザクションをAccessに挿入できますか?Accessが単独でこれを行わないのはなぜですか?