2010-09-05 16 views
16

Cuando un usuario inicia mi aplicación, puede crear un nuevo proyecto, lo que significa crear una nueva base de datos con todas las tablas.¿Cómo puedo crear una nueva base de datos SQLite, con todas las tablas, sobre la marcha?

No quiero copiar la estructura de las tablas de una base de datos/proyecto anterior porque, mientras tanto, las tablas podrían haber cambiado debido a una actualización del programa. Esto llevaría a accidentes.

Así que con cada actualización de aplicación que implemente, también debería implementar un archivo de script que cree la base de datos y las tablas, ¿verdad?

¿Cómo debería ser el archivo de script y cómo lo llamaría en C#?

+0

no tengo SQLLite (por lo que esta no es una respuesta), pero usted debe ser capaz de exportar el esquema de base de datos y todos los datos iniciales a los archivos de secuencia de comandos SQL . A continuación, puede ejecutar esos scripts en la instalación para configurar su base de datos. Mantenga los scripts actualizados cuando actualice su esquema. – ChrisF

+0

Gracias Timwi por ese enlace. – Elisabeth

Respuesta

3

Podría escribir un script para hacerlo todo, pero también podría tener un proyecto de prueba de unidad que pruebe la interfaz de su base de datos. Si lo hace, querrá poder crear una base de datos de prueba con datos ficticios solo para pruebas. Básicamente, mi punto es que si utiliza un archivo de script para crear los datos de la aplicación y si desea agregar pruebas de unidad, necesitará tener otro archivo de script para ellos, o querrá crear su base de datos en el código .

Yo recomendaría la creación de una clase en su código que pueda crear el esquema de la base de datos sobre la marcha para la aplicación y las pruebas unitarias. Luego, si cambias el esquema, solo tienes que preocuparte por ello en un lugar y no tener que lidiar con cosas que no estén sincronizadas (con suerte).

Dado que está utilizando SQLite y C#, le recomiendo que pruebe SQLite.NET. Ha hecho mi vida mucho más fácil, y he estado muy feliz con ella hasta el momento.

Con SQLite.NET, crearía un SQLiteCommand, establecería su CommandText en "CREATE TABLE (su esquema aquí)", y luego llamaría ExecuteNonQuery para generar la tabla.

+0

¿Qué opina sobre incluir una secuencia de comandos de creación de sqlite en mi instalador de instalación de la aplicación o actualización de la aplicación? Este script se ejecuta cuando el usuario crea un nuevo proyecto. Entonces, todo lo que debo hacer cada vez que publico una nueva versión, creo un archivo de texto y copio todas las tablas Crear ... de mis tablas en este archivo. – Elisabeth

+0

El IDE sqlite que utilizo puede volcar fácilmente todas las tablas y sus estructuras en UN archivo .sql, todos semicolon separados al igual que lo necesito para ejecutar varias sentencias con una ExecuteNonQuery :) – Elisabeth

0

Para obtener ayuda, puede ver el proyecto de dominio público que hizo un amigo mío: www.codeplex.com/publicdomain.

Junto con toneladas de otras utilidades útiles, mira en el Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables). Solo use SQL para el tipo de base de datos.

23

Tal vez esto ayude:

SQLiteConnection.CreateFile("c:\\Ik.db"); 

Crear una nueva base de datos sobre la marcha y ejecutar una consulta en él. La consulta debe ser algo como esto:

CREATE TABLE IF NOT EXISTS [Setting](
[ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
[Key] NVARCHAR(2048) NULL, 
[Value] NVARCHAR(2048) NULL 
); 
+2

Argumentos numéricos entre paréntesis que siguen el nombre del tipo, _e. gramo. "NVARCHAR (2048)" _ son ignorados por SQLite; SQLite no impone ninguna restricción de longitud. –

+0

No debe codificar la ruta a su '.archivo db'; debe ser configurable en la instalación (aunque eso no necesariamente significa que el usuario final debe especificar dónde instalar el db), especialmente dado que C# y sqlite son multiplataforma. –

Cuestiones relacionadas