Транзакционный sqlite? в С#

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

Ответы

Ответ 1

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

Транзакция: sqlite автоматически помещает каждую команду в свою транзакцию, если вы не укажете, когда начать. EDIT: TML объясняет эту часть немного более глубокой в ​​своем ответе

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

using (DbTransaction dbTrans = myDBConnection.BeginTransaction())
{
     using (DbCommand cmd = myDBConnection.CreateCommand())
     {
         ...
     }
     dbTrans.Commit();
}

Ответ 2

SQLite.org говорит:

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

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