У меня есть база данных SQLite с таблицей для хранения данных и виртуальной таблицей, которая связана с этой таблицей для функций поиска. Я получаю сообщение об ошибке, которое предположительно подразумевает, что мои таблицы и/или переменные имеют разные типы, но это не так.
Я проверил свой ввод, и кажется, что все в порядке. . Я несколько раз менял свои функции, но безрезультатно. MRE:
У меня есть база данных SQLite с таблицей для хранения данных и виртуальной таблицей, которая связана с этой таблицей для функций поиска. Я получаю сообщение об ошибке, которое предположительно подразумевает, что мои таблицы и/или переменные имеют разные типы, но это не так. Я проверил свой ввод, и кажется, что все в порядке. . Я несколько раз менял свои функции, но безрезультатно. MRE: [code]using Microsoft.Data.Sqlite;
namespace SqliteExample { struct Track { public string FilePath; public string Artist; public string Title;
public Track(string file_path, string artist, string title) { FilePath = file_path; Artist = artist; Title = title; } }
class Program { static async Task Main(string[] args) { // Get database connection var connection = await Init();
static async Task Init() { // Make a connection to our database and open it var connection = new SqliteConnection("Data Source=meta.db"); await connection.OpenAsync();
// Create tables if they don't already exist using (var command = connection.CreateCommand()) { Console.WriteLine("\nCreating tables..."); // Create metadata table command.CommandText = """ CREATE TABLE IF NOT EXISTS meta ( file TEXT PRIMARY KEY, artist TEXT, title TEXT ) """;
await command.ExecuteNonQueryAsync();
// Create FTS5 virtual table command.CommandText = """ CREATE VIRTUAL TABLE IF NOT EXISTS search USING fts5( artist, title, content='meta', content_rowid='file' ); """;
await command.ExecuteNonQueryAsync();
// Push triggers command.CommandText = """ CREATE TRIGGER IF NOT EXISTS insert_search AFTER INSERT ON meta BEGIN INSERT INTO search(rowid, artist, title) VALUES (new.file, new.artist, new.title); END; CREATE TRIGGER IF NOT EXISTS update_search AFTER UPDATE ON meta BEGIN INSERT INTO search(search, rowid, artist, title) VALUES ('delete', old.file, old.artist, old.title); INSERT INTO search(rowid, artist, title) VALUES (new.file, new.artist, new.title); END; CREATE TRIGGER IF NOT EXISTS delete_search AFTER DELETE ON meta BEGIN INSERT INTO search(search, rowid, artist, title) VALUES ('delete', old.file, old.artist, old.title); END; """;
await command.ExecuteNonQueryAsync(); }
return connection; }
static async Task InsertTracks(SqliteConnection connection, Track[] tracks) { using (var command = connection.CreateCommand()) { Console.WriteLine("\nInserting entries..."); command.CommandText = "INSERT INTO meta (file, artist, title) VALUES ($path, $artist, $title)";