C# SQLite FTS5 表和触发器创建

问题描述 投票:0回答:2

我正在使用 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);
        }
    }
c# sqlite fts5
2个回答
1
投票

SQL 逻辑错误没有这样的模块:FTS5。

就像错误消息所示,您的 sqlite3 库没有 FTS5 模块。在构建库时,它可能未配置为将其作为内置库包含在内,因为默认情况下未启用它。无论谁配置和构建了您正在使用的库,它都可能作为动态可加载模块提供。或者不是。

就我个人而言,我总是在我使用的任何程序中包含 sqlite3.c 的副本,以避免依赖外部依赖项,因此您可以确保始终使用具有您想要的所有功能的版本使用现在。不知道你必须在 C# 中做什么才能使用你自己的本地实例,但我确信有办法。

将 FTS5 构建到 sqlite3 中或作为可加载模块的说明


0
投票

我解决了这个错误消息“SQL Logic error no such module: FTS5”。通过使用“LoadExtension”命令:

MyConnection.EnableExtensions(true);
MyConnection.LoadExtension("SQLite.Interop.dll", "sqlite3_fts5_init");
© www.soinside.com 2019 - 2024. All rights reserved.