Сначала извините за мой плохой английский, но я буду стараться изо всех сил.
Сейчас я программирую приложение .net, используя Access 2007 в качестве хранилища данных.
В двух словах: у меня есть две темы. Один поток вставляет строку с транзакцией в таблицу. Другой поток обновляет много строк через постоянные интервалы.
Тема 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 этого не делает itselft?