2010-09-05 15 views
16

Quando un utente avvia la mia app, può creare un nuovo progetto, il che significa creare un nuovo database con tutte le tabelle.Come posso creare un nuovo database SQLite, con tutte le tabelle, al volo?

Non voglio copiare la struttura delle tabelle da un database/progetto precedente perché nel frattempo le tabelle potrebbero essere cambiate a causa di un aggiornamento del programma. Ciò porterebbe a incidenti.

Quindi con ogni aggiornamento dell'applicazione che distribuisco, dovrei anche distribuire un file di script che crea il database e le tabelle, giusto?

Come dovrebbe essere il file di script e come lo chiamereste in C#?

+0

Non ho SqlLite (che è il motivo per cui non si tratta di una risposta), ma si dovrebbe essere in grado di esportare lo schema del database e tutti i dati iniziali per i file di script SQL . È quindi possibile eseguire tali script durante l'installazione per configurare il database. Mantenere gli script aggiornati quando si aggiorna lo schema. – ChrisF

+0

Grazie a Timwi per questo link. – Elisabeth

risposta

3

Si potrebbe scrivere uno script per fare tutto, ma si potrebbe anche avere un progetto di test unitario che verifica l'interfaccia del database. Se lo fai, allora vorrai essere in grado di creare un database di test con dati fittizi solo per i test. Fondamentalmente, il mio punto è che se si utilizza un file di script per creare i dati dell'applicazione e se si desidera aggiungere test di unità, è necessario disporre di un altro file di script per loro, o si vorrà creare il proprio database nel codice .

Vorrei sostenere l'authoring di una classe nel codice in grado di creare lo schema del database in tempo reale per l'applicazione e le unit test. Quindi, se cambi lo schema, devi solo preoccuparti di ciò in un punto e non dover gestire le cose che vanno fuori sincrono (si spera).

Poiché si utilizza SQLite e C#, si consiglia di provare SQLite.NET. Mi ha reso la vita molto più facile, e finora ne sono stato molto contento.

Con SQLite.NET, si crea un SQLiteCommand, si imposta CommandText su "CREATE TABLE (lo schema qui)", quindi chiama ExecuteNonQuery per generare la tabella.

+0

Cosa ne pensi di includere uno script sqlite per creare il mio installer di installazione dell'applicazione o l'aggiornamento dell'applicazione. Questo script viene eseguito quando l'utente crea un nuovo progetto. Quindi tutto ciò che devo fare quando rilascio una nuova versione crea un file di testo e copia tutte le tabelle Crea ... delle mie tabelle in questo file. – Elisabeth

+0

L'IDE sqlite che uso può facilmente scaricare tutte le tabelle e le sue strutture in UN file .sql tutto semi-colon separato proprio come mi serve per eseguire più istruzioni con un ExecuteNonQuery :) – Elisabeth

0

Per assistenza, è possibile controllare il progetto di dominio pubblico creato da un mio amico: www.codeplex.com/publicdomain.

Insieme a tonnellate di altre utilità utili, esaminare Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables). Basta usare SQL per il tipo di database.

23

Forse questo aiuterà:

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

Creare un nuovo database al volo ed eseguire una query su di esso. La query dovrebbe essere qualcosa di simile:

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

Gli argomenti numerici tra parentesi seguono il nome del tipo, _e. g. "NVARCHAR (2048)" _ sono ignorati da SQLite; SQLite non impone restrizioni di lunghezza. –

+0

Non dovresti codificare il percorso del tuo '.db' file; dovrebbe essere configurabile al momento dell'installazione (sebbene ciò non significhi necessariamente che l'utente finale debba specificare dove installare il db), soprattutto perché C# e sqlite sono multipiattaforma. –

Problemi correlati