Két Sqlite adatbázis egyidejű kezelése c# programból

Két Sqlite adatbázis egyidejű kezelése c# programból
2022-02-24T14:38:15+01:00
2022-03-02T13:38:13+01:00
2022-10-15T21:21:03+02:00
aplajoska
Tisztelt Mindenki!

Olyan problémával szembesültem, hogy egyidejűleg két vagy több Sqlite adatbázist kellene kezelnem. Egyik adatbázisba a közös táblákat tartanám (Ügyfelek, rendszerkonfig stb.) a másik (vagy többi) adatbázisban viszont csak a tárgyévben használt táblák lennének. Az utóbbi adatbázis neve is utalna arra az évre, amelynek a tartalmát tárolja. Így egy könyvtárba több év adatai lennének külön adatbázisba.

Amit eddig megcsináltam:

public static SQLiteCommand par; public static SQLiteCommand apar; public static SQLiteConnection kapcs; public static SQLiteConnection akapcs; public static void kapcsolodas() { kapcs = new SQLiteConnection("Data Source=" + Program.sAUtvonal + @"" + Program.BazisNeve + "-" + Program.nTargyEv.ToString()+".db3;Version=3;FailIfMissing=True;"); par = kapcs.CreateCommand(); if (!File.Exists(Program.sAUtvonal + @"" + Program.BazisNeve + "-" + Program.nTargyEv.ToString()+".db3")) { try { SQLiteConnection.CreateFile(Program.sAUtvonal + @"" + Program.BazisNeve + "-" + Program.nTargyEv.ToString() + ".db3"); //Adatbázis táblák létrehozása } catch (Exception e) { Alap.HibaIr("Nem sikerült megnyitni a(z) "+Program.sAUtvonal + @"" + Program.BazisNeve + "-" + Program.nTargyEv.ToString() + ".db3 adatbázist! Hiba: " + e.Message); Application.Exit(); } } } public static void akapcsolodas() { SQLiteConnection akapcs = new SQLiteConnection("Data Source=" + Application.StartupPath+@"\Alap.db3;Version=3;FailIfMissing=True;"); SQLiteCommand apar = akapcs.CreateCommand(); if (!File.Exists(Application.StartupPath + @"\Alap.db3")) { try { SQLiteConnection.CreateFile(Application.StartupPath + @"\Alap.db3"); /* Kezdő adatok beírása */ TablaKeszites("A", "ALAPKONFIG"); TablaKeszites("A", "LOGOK"); } catch (Exception e) { Alap.HibaIr("Nem sikerült megnyitni a(z) " + Application.StartupPath + @"\Alap.db3 adatbázist! Hiba: " + e.Message); Application.Exit(); } } }
 A kapcsolodas nevű függvény változó nevű adatbázist  (Adatbazis-2019.db3) hoz létre a meghatározott útvonalon.
Az  akapcsolodas nevű függvény fix nevű adatbázist (Alap.db3) hoz létre a meghatározott útvonalon.
A program induláskor be kellene töltenie az Alap.db3 adatbázisból az aktuális évhez tartozó adatokat (Adatbázis neve, útvonala (c:\Adatok\Adatbazis-2019.db3)
Az adatbázisokat a következő fügvényekkel nyitom meg:

public static void Adatb(string Hogy) //Adatbázis nyitás= NY zárás= Z { if (Hogy == "NY") { if (kapcs.State == System.Data.ConnectionState.Closed) { kapcs.Open(); } } else { if (kapcs.State == System.Data.ConnectionState.Open) { kapcs.Close(); } } } public static void AAdatb(string Hogy) //Adatbázis nyitás= NY zárás= Z { if (Hogy == "NY") { if (akapcs.State == System.Data.ConnectionState.Closed) { akapcs.Open(); } } else { if (akapcs.State == System.Data.ConnectionState.Open) { akapcs.Close(); } } }
Mivel így szét van szedve a kapcsolat nekem logikusnak látszik, hogy az adatbázis matatásánál (insert, update, delete, Drop table) a kapcs és aakapcs SQLiteConnection-ra hivatkozva adom ki a az SQL parancsokat. Valamiért nem tudok váltani az adatbázisok között. Ha az adatbázisok nem léteznek, programból szeretném létrehozni, majd a táblákat programból beszúrni.

public static bool TablaKeszites(string Adatbazis, string Tabla) { bool bVissza = false; string sSql = string.Empty; SQLiteCommand sSqlPar; SQLiteTransaction tr; if (Adatbazis == "A") { AAdatb("NY"); } else { Adatb("NY"); } switch (Tabla) { case "ALAPKONFIG": //Tábla neve sSql = @"CREATE TABLE IF NOT EXISTS ALAPKONFIG ( TARGYEV TEXT ( 4), ADATUTVONAL TEXT (250), EXCELUTVONAL TEXT (250), MENTUTVONAL TEXT (250), PROGRAMKEZD DATETIME, UTUSERKEZD DATETIME, UTUSERBEF DATETIME, OHASZNALTIDO DOUBLE, MENTALAP INTEGER ( 7), LOGALAP INTEGER ( 7), LOGFILE TEXT ( 1), VANHANG TEXT ( 1));"; break; case "LOGOK": //Tábla neve sSql = @"CREATE TABLE IF NOT EXISTS LOGOK ( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, DATUM DATETIME, FELHASZN TEXT (100), ESEMENY TEXT (250), GEPNEV TEXT ( 50), IPCIM TEXT ( 50), MACCIM TEXT ( 20), GATEWAY TEXT ( 50));"; break;
Hogyan kellene kezelnem, hogy mikor melyik adatbázis táblájába matassak?

Segítségeteket előre is köszönöm!

Lajos
Mutasd a teljes hozzászólást!
Az SQLiteCommand-t amivel épp matatni akarsz a kapcs vagy az akapcs connection-al incializálod.

var command = new SQLiteCommand(parancs, kapcs);
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd