транзакционный sqlite? в C # - PullRequest
3 голосов
/ 29 мая 2009

Я пишу прототип приложения. Прямо сейчас некоторые вещи терпят неудачу, такие как вставка неуникального столбца. В этом случае я хотел бы откатить все, что я сделал. Как я могу это сделать? Я также заметил, что в sqlite мне нужно зафиксировать данные, в C # кажется, что это происходит автоматически, что заставляет меня подозревать, что есть опция автоматического отката?

Ответы [ 2 ]

13 голосов
/ 29 мая 2009

Откат: похоже, что вы ищете текст команды «INSERT OR ROLLBACK ...»

Транзакция: sqlite автоматически переводит каждую команду в собственную транзакцию, если вы не укажете, когда начинать. РЕДАКТИРОВАТЬ: TML объясняет эту часть более подробно в своем ответе

пример явного открытия / совершения транзакции:

using (DbTransaction dbTrans = myDBConnection.BeginTransaction())
{
     using (DbCommand cmd = myDBConnection.CreateCommand())
     {
         ...
     }
     dbTrans.Commit();
}
5 голосов
/ 29 мая 2009

SQLite.org говорит:

Изменения в блокировке и параллелизме управление в SQLite версии 3 также внести некоторые тонкие изменения в как транзакции работают на SQL уровень языка. По умолчанию SQLite версия 3 работает в режиме автоматической фиксации. В режиме автоматической фиксации все изменения базы данных совершаются, как только все операции, связанные с текущим соединение с базой данных завершено.

Команда SQL "НАЧАЛО СДЕЛКИ" (ключевое слово TRANSACTION необязательно) используется для извлечения SQLite из режим автоматической фиксации. Обратите внимание, что НАЧИНАЕТСЯ команда не получает никаких блокировок на база данных. После начала команды, Общий замок будет получен, когда первый оператор SELECT выполняется. ЗАБРОНИРОВАННАЯ блокировка будет получена, когда первая ВСТАВКА, ОБНОВЛЕНИЕ или УДАЛЕНИЕ заявление выполнено. Нет ЭКСКЛЮЗИВ замок приобретен, пока либо кэш памяти заполняется и должен быть разлито на диск или до транзакция совершается. Таким образом, система задерживает блокировку доступа на чтение к файл файл до последнего возможного момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...