Per chiunque abbia bisogno di fare questo in C# con System.Data.SQLite è possibile avviare una transazione, e poi subito a rotolare indietro come segue: -
private bool DatabaseIsValid(string filename)
{
using (SQLiteConnection db = new SQLiteConnection(@"Data Source=" + filename + ";FailIfMissing=True;"))
{
try
{
db.Open();
using (var transaction = db.BeginTransaction())
{
transaction.Rollback();
}
}
catch (Exception ex)
{
log.Debug(ex.Message, ex);
return false;
}
}
return true;
}
Se il file non è un database valido il seguito da SQLiteException
viene generato - il file è crittografato o non è un database (System.Data.SQLite.SQLiteErrorCode.NotADb
). Se non si utilizzano database crittografati, questa soluzione dovrebbe essere sufficiente. (Per la versione 1.0.81.0 di System.Data.SQLite era necessario solo 'db.Open()', ma quando ho eseguito l'aggiornamento alla versione 1.0.91.0 ho dovuto inserire il blocco interno interno per farlo funzionare.
fonte
2014-03-19 09:39:45
"pragma schema_version;" a volte l'errore "database è bloccato". Darò il "pragma quick_check;" una prova –
Se il tuo database è bloccato, è bloccato. Tutto fallirà. Riprova quando non è bloccato. :) –
Hai ragione. Tutto fallisce quando il database è bloccato. Anche seleziona. Nel mio caso volevo determinare se il file era un database Sqlite3. Se ottengo l'errore "database è bloccato", penso che sia sicuro assumere che il file sia un database Sqlite3. –