2014-06-12 18 views
12

Sto provando a creare un dl sqlite al livello di programmazione se non esiste. Ho scritto il seguente codice, ma ricevo un'eccezione nell'ultima riga.Crea dl sqlite al livello di programmazione se non esiste?

if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
{ 
    Console.WriteLine("Just entered to create Sync DB"); 
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 
    string sql = "create table highscores (name varchar(20), score int)"; 
    SQLiteCommand command = new SQLiteCommand(sql, sqlite2); 
    command.ExecuteNonQuery(); 
} 
sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 

ottengo l'eccezione alla linea command.ExecuteNonQuery(); L'eccezione è Invalid operation exception was unhandled. C'è un altro modo per aggiungere un file sqlite al tuo progetto? Posso farlo manualmente? In caso contrario, come posso risolvere il problema sopra riportato?

+2

Qual è il valore di 'sqlite2' in quel punto? –

+0

il suo valore è nullo – zzzzz

risposta

22

Per eseguire qualsiasi tipo di comando di definizione dati sul database è necessaria una connessione aperta per passare il comando. Nel codice si crea la connessione DOPO l'esecuzione della query.

Naturalmente, dopo che la creazione, è necessario aprire la connessione

if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
{ 
    Console.WriteLine("Just entered to create Sync DB"); 
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"); 

    using(sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite")) 
    { 
     sqlite2.Open(); 
     string sql = "create table highscores (name varchar(20), score int)"; 
     SQLiteCommand command = new SQLiteCommand(sql, sqlite2); 
     command.ExecuteNonQuery(); 
    } 
} 

Tuttavia, se si utilizza la versione 3 del provider, non c'è bisogno di verificare l'esistenza del file. Basta aprire la connessione per creare il file se non esiste.

+0

Now Iam ottiene questa eccezione "Impossibile caricare DLL 'SQLite.Interop.dll': Impossibile trovare il modulo specificato. (Eccezione da HRESULT: 0x8007007E)" alla riga dove apro la connessione – zzzzz

+0

Hope questo aiuta http://stackoverflow.com/questions/13028069/unable-to-load-dll-sqlite-interop-dll – Steve

+0

Ricevo ancora lo stesso errore – zzzzz