sqlite3 c# поиск по всем таблицам
Я использую библиотеку System.Data.SQLite. Нужно в цикле пробежать по всем таблицам (их около 50-100) базы данных, обновить значения полей и если условие, то создать новые строки.
Ответы (1 шт):
да, после Вашего уточнения "Мне интересно, существует ли функция в запросе, которая позволяет пройти по всем таблицам в цикле." вопрос стал совершенно корректным.
Открываем SQLite Show Tables, находим раздел "Showing tables using SQL statement", там дан пример запроса
SELECT
name
FROM
sqlite_schema
WHERE
type ='table' AND
name NOT LIKE 'sqlite_%';
В C# этот запрос можно оформить так:
using System;
using System.Collections.Generic;
using Microsoft.Data.Sqlite;
namespace SimpleSql
{
class Program
{
static void Main(string[] args)
{
List<string> taleList = new List<string>();
using (var connection = new SqliteConnection("Data Source=hello.sqlite")) {
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
connection.Open();
const string sql_query = "SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%';";
var command = new SqliteCommand(sql_query, connection);
using (var reader = command.ExecuteReader()) {
while (reader.Read()) {
var name = reader.GetString(0);
taleList.Add(name);
Console.WriteLine($"Hello, {name}!");
}
}
}
}
}
}
Для работы примеру нужна какая нибудь база, которая после компиляции программы окажется с ней в одном фолдере (или укажите полный путь к безе), и две зависимости: SQLite и Microsoft.Data.Sqlite
Последнюю желательно не спутать с Microsoft.Data.Sqlite.Core - на SO много слёз пролито, потому что в этом случае строка перед connection.Open(); не работает :-)
Готовый пример можно сказать из папки SimpleSqlite на github.com/junecat/VariousExamples