Как проверить целостность БД SQLite с помощью Dapper в C # - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь отследить ошибку повреждения базы данных в проекте C #, используя Dapper и SQLite.Поэтому я ищу способ проверить целостность БД в коде.Я нашел несколько мест, в которых говорилось, что я могу послать команду «PRAGMA целостность_чека» для этого, но функция Dapper Execute возвращает только int для числа произведенных строк, что на самом деле не имеет смысла (и, кажется, возвращает 0).

Есть ли способ сделать эту проверку целостности или что-то подобное?

1 Ответ

0 голосов
/ 12 декабря 2018

Я не знаком с Dapper, но если вы используете SQLite 3.16.0 или новее, я думаю, у вас есть по крайней мере 1 вариант.Возможно 2. Начиная с версии 3.16.0, в SQLite появилась новая экспериментальная функция, которая называется PRAGMA functions .

Это означает, что теперь вы можете использовать встроенные функции PRAGMA без побочных эффектов.в виде таблиц.Например, в дополнение к старому синтаксису:

PRAGMA integrity_check;

Теперь вы также можете проверить целостность базы данных следующим образом:

SELECT integrity_check FROM pragma_integrity_check();

Или:

SELECT * FROM pragma_integrity_check();

Такесли вы можете запускать произвольные SELECT s в произвольных таблицах через Dapper и получать доступ к их результатам, то это все.

Но если вы не можете, и единственная информация, которую вы получаете на самом деле, это просто количество строквлияет, есть еще решение.Вы можете создать запрос, который удаляет 1 строку, если integrity_check в порядке и 0 строк, если это не так:

DROP TABLE IF EXISTS Dummy;
CREATE TABLE Dummy as SELECT 'ok' as Value;
DELETE FROM Dummy WHERE Value = (SELECT * FROM pragma_integrity_check());

Это работает для меня в SQLite версии 3.25.3, но, как я уже сказалэто всего лишь экспериментальная функция, которая все еще может быть изменена, точный синтаксис может отличаться или не различаться в разных версиях.

...