sqlite3 c# поиск по всем таблицам

Я использую библиотеку System.Data.SQLite. Нужно в цикле пробежать по всем таблицам (их около 50-100) базы данных, обновить значения полей и если условие, то создать новые строки.


Ответы (1 шт):

Автор решения: S.H.

да, после Вашего уточнения "Мне интересно, существует ли функция в запросе, которая позволяет пройти по всем таблицам в цикле." вопрос стал совершенно корректным.

Открываем 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

→ Ссылка