Laden einer SQLite-Datenbank aus einem Bytestream in .NET

9

Ich versuche eine SQLite-Datenbank zu laden, die als Ressource in meine ausführbare Datei eingebettet wird. Für diejenigen, die neugierig sind, ist es, weil ich eine kleine SQLite-Datenbank verwenden, um Konfigurationsdaten zu speichern, und ich möchte die Standardkonfiguration in der ausführbaren Datei eingebettet senden (ich hasse es, Dateien mit einem Programm zu tragen).

Dies wäre nur die Standardkonfiguration. Das heißt, ich muss diese Konfiguration nicht ändern. Es ist statisch und kann nicht geändert werden, nachdem mein Programm erstellt wurde.

Ich verwende den System.Data.SQLite-Wrapper für SQLite.

Ich kann auf einen Byte-Stream wie folgt zugreifen:

%Vor%

Ich bin jedoch in Bezug auf die Erstellung eines SQLiteConnection -Objekts aus diesem Stream ratlos.

Der einfache Ausweg wäre, bei jedem Laden des Programms einfach eine neue Konfigurationsdatei zu erzeugen und dann SQLite anzuweisen, aus dieser Datei zu lesen. Das würde wahrscheinlich funktionieren, aber ich möchte diese Technik vermeiden - ich beabsichtige, meine Lösung für dieses Problem wiederzuverwenden, um auch Unterstützung für Internationalisierung einzubeziehen (wobei jede Sprache eine [komprimierte] SQLite-Datenbank ist und die Standardsprache in die ausführbare Datei eingebettet ist) Der Benutzer könnte andere Sprachen hinzufügen, indem er einfach andere Sprachdatenbanken in das Arbeitsverzeichnis des Programms kopiert).

Ich kümmere mich nicht um die Speicherkosten, um diese Datenbank im Speicher zu halten. Es wird sehr klein sein (wahrscheinlich weniger als 50 KiB), das stört mich nicht. Offensichtlich, wenn dies eine größere Datenbank war, könnte dies ein Problem sein.

Schließlich ist mir bewusst, dass dies als eine schlechte Möglichkeit zum Speichern einer Konfiguration angesehen werden kann. Während ich zustimme, dass eine Klartext-basierte Lösung für Fälle nützlich ist, in denen der Benutzer alle seine Einstellungen manuell eingibt, würde dies hauptsächlich für Einstellungen verwendet werden, die der Benutzer nicht explizit definiert. Zum Beispiel, um die Positionen verschiedener Docking-Fenster in einer Anwendung zu speichern oder um Daten darüber zu speichern, wo interne Ressourcen gefunden werden können.

Danke für Ihre Hilfe.

    
Ethan 20.06.2011, 23:35
quelle

2 Antworten

5

Scheint, dass diese Funktionalität in einem System.Data.SQLite-Provider nicht implementiert ist. Sie können die In-Memory-Datenbank nicht einmal in einer Datei (d. H. In einem Binärformat) speichern, sondern nur in Form eines SQL-Dumps.

Eine der Lösungen besteht also darin, SQL-Code für die Datenbankerstellung in einer Ressource zu speichern. Dann jedes Mal, wenn die Anwendung gestartet wird, in der Speicher-DB erstellen.

    
Petr Abdulin 21.06.2011, 04:16
quelle
0

Ich glaube, dass Sie dies für Ihre Verbindungszeichenfolge verwenden möchten:

%Vor%

Siehe hier zum Beispiel: Öffnen einer SQLiteConnection für einen binären Stream anstelle einer Datei?

    
mellamokb 21.06.2011 03:28
quelle

Tags und Links