C# SQLite FTS5 Создание таблиц и триггеров
Я создаю виртуальную таблицу с sqlite fts5, и у меня появляется следующее сообщение об ошибке: Ошибка логики SQL нет такого модуля: FTS5. Ниже приведен мой код: с помощью диспетчера пакетов в VS 2017 года я уже скачал SQLite и SQLite FTS5.
private static void CreateReport()
{
try
{
using (SQLiteConnection sqliteConnection = new SQLiteConnection(DataSources.LocalConnectionString()))
{
sqliteConnection.Open();
sqliteConnection.EnableExtensions(true);
string commandText = "CREATE TABLE IF NOT EXISTS JReport(JRId INTEGER PRIMARY KEY, IDId INTEGER, CaseId INTEGER, BoxName TEXT, JRText TEXT, JRFormatted TEXT)";
string commandText1 = "CREATE VIRTUAL TABLE IF NOT EXISTS DReport USING FTS5(JRId, CaseId, BoxName, CONTENT = 'JReport', CONTENT_ROWID = 'JRId')";
string commandText2 = "CREATE TRIGGER DocRepo AFTER INSERT ON JReport BEGIN INSERT INTO DReport(RowId, JRId, CaseId, BoxName) VALUES(NEW.JRId, NEW.CaseId, NEW.BoxName) END";
using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText, sqliteConnection))
{
sqliteCommand.ExecuteNonQuery();
sqliteCommand.Dispose();
}
using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText1, sqliteConnection))
{
sqliteCommand.ExecuteNonQuery();
sqliteCommand.Dispose();
}
using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText2, sqliteConnection))
{
sqliteCommand.ExecuteNonQuery();
sqliteCommand.Dispose();
}
sqliteConnection.Close();
}
}
catch (Exception ex)
{
MessageBoxEx.Show("An error has occurred while creating the Report table, the original error is: " +
ex.Message, "Report", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
2 ответа
Ошибка логики SQL нет такого модуля: FTS5.
Как и в сообщении об ошибке, ваша библиотека sqlite3 не имеет модуля FTS5. Вероятно, он не был настроен на включение его как встроенного при сборке библиотеки, так как он не включен по умолчанию. Он мог быть сделан доступным как динамически загружаемый модуль кем бы он ни настраивал и собирал используемую вами библиотеку. Или нет.
Лично я просто всегда включаю копию sqlite3.c в любую программу, которую я использую, которая использует ее, чтобы не полагаться на внешнюю зависимость, и поэтому вы можете быть уверены, что вы всегда используете версию со всеми функциями, которые вы хотите использовать подарок. Не знаю, что вам нужно сделать в C#, чтобы использовать свой собственный локальный экземпляр, но я уверен, что есть способ.
Инструкция по сборке FTS5 в sqlite3 или в качестве загружаемого модуля.
Я решил это сообщение об ошибке «Логическая ошибка SQL: нет такого модуля: FTS5». с помощью команды LoadExtension:
MyConnection.EnableExtensions(true);
MyConnection.LoadExtension("SQLite.Interop.dll", "sqlite3_fts5_init");