Estoy tratando de cargar una base de datos SQLite que se incorporará en mi ejecutable como recurso. Para aquellos que son curiosos, es porque uso una pequeña base de datos SQLite para almacenar datos de configuración, y me gustaría enviar la configuración predeterminada incrustada dentro del ejecutable (odio tener que cargar archivos junto con un programa).Cargando una base de datos SQLite de una secuencia de bytes en .NET
Esta sería simplemente la configuración predeterminada. Es decir, no necesito modificar esta configuración. Es estático y no se puede cambiar después de que se haya creado mi programa.
Estoy usando el contenedor System.Data.SQLite para SQLite.
que puede tener acceso a un flujo de bytes de esta manera:
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
// use of "stream" here.
}
Sin embargo, yo estoy en una pérdida en lo que respecta a la creación de un objeto SQLiteConnection
de esta corriente.
La salida más fácil sería simplemente generar un nuevo archivo de configuración cada vez que se carga el programa, y luego decirle a SQLite que lea de ese archivo. Probablemente esto funcionaría, pero me gustaría evitar esa técnica. Planeo reutilizar mi solución a este problema para incluir también soporte de internacionalización (donde cada idioma es una base de datos SQLite [comprimida] y el lenguaje predeterminado está incrustado en el ejecutable; el usuario podría agregar otros idiomas simplemente copiando otras bases de datos de idiomas al directorio de trabajo del programa).
No me preocupan los costos de memoria de mantener esta base de datos en la memoria. Será muy pequeño (probablemente menos de 50 KiB), por lo que no me molesta. Obviamente, si se tratara de una base de datos más grande, esto podría ser un problema.
Finalmente, soy consciente de que esto puede verse como una forma inadecuada de almacenar una configuración. Si bien estoy de acuerdo en que una solución basada en texto claro es adecuada para casos en los que el usuario ingresa todas sus configuraciones manualmente, esto se usaría principalmente para configuraciones que el usuario no define explícitamente. Por ejemplo, para almacenar las posiciones de varias ventanas de acoplamiento en una aplicación, o para almacenar datos sobre dónde se pueden encontrar los recursos internos.
Gracias por su ayuda.
7 años después y se pregunta si alguna vez obtuvo una solución para esto que le permitió guardar un sql lite db en un binario de la memoria o cargarlo desde una secuencia? – lucuma