Для разработки приложения мы должны прочитать строки n строк из таблицы и затем выборочно обновлять эти строки на основе критериев, специфичных для домена. Во время этой операции все остальные пользователи базы данных должны быть заблокированы, чтобы избежать плохих чтений.SQLite Transaction not commit
Я начинаю транзакцию, читаю строки, и, итерации по набору записей формируют строку операторов обновления. После того, как я закончил чтение набора записей, я закрываю набор записей и запускаю обновления. На этом этапе я фиксирую транзакцию, однако ни одно из обновлений не выполняется в базе данных.
private static SQLiteConnection OpenNewConnection()
{
try
{
SQLiteConnection conn = new SQLiteConnection();
conn.ConnectionString = ConnectionString;//System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
conn.Open();
return conn;
}
catch (SQLiteException e)
{
LogEvent("Exception raised when opening connection to [" + ConnectionString + "]. Exception Message " + e.Message);
throw e;
}
}
SQLiteConnection conn = OpenNewConnection();
SQLiteCommand command = new SQLiteCommand(conn);
SQLiteTransaction transaction = conn.BeginTransaction();
// Also fails transaction = conn.BeginTransaction();
transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
command.CommandType = CommandType.Text;
command.Transaction = transaction;
command.Connection = conn;
try
{
string sql = "select * From X Where Y;";
command.CommandText = sql;
SQLiteDataReader ranges;
ranges = command.ExecuteReader();
sql = string.Empty;
ArrayList ret = new ArrayList();
while (MemberVariable > 0 && ranges.Read())
{
// Domain stuff
sql += "Update X Set Z = 'foo' Where Y;";
}
ranges.Close();
command.CommandText = sql;
command.ExecuteNonQuery();
// UPDATES NOT BEING APPLIED
transaction.Commit();
return ret;
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
finally
{
transaction.Dispose();
command.Dispose();
conn.Close();
}
return null;
Если я удалю транзакцию, все будет работать так, как ожидалось. «Доменный материал» является доменным specfic, и кроме чтения значений из набора записей не открывается база данных. Я забыл шаг?
Кто-нибудь заметил, насколько странно, что этот сайт использует полосы прокрутки на странице, несмотря на то, как часто Джефф Этвуд жалуется на этот вид дизайна? – marr75