Não é possível renomear o arquivo de banco de dados SQLite depois de usá -lo
-
19-09-2019 - |
Pergunta
Estou tentando renomear meu arquivo de banco de dados SQLITE depois de terminar o uso, no entanto, o arquivo ainda parece ser aberto pelo SQLite mesmo depois de todas as minhas conexões estarem fechadas.
Aqui está um exemplo do que estou fazendo:
using (DbConnection conn = new SQLiteConnection("Data Source=test.db"))
{
conn.Open();
DbCommand command = conn.CreateCommand();
command.CommandText = "select id from test";
command.ExecuteScalar();
}
File.Move("test.db", "test.db.test");
o Move
A chamada lança uma ioexception. Esta é a única conexão que eu tenho com este arquivo de banco de dados. Quando o aplicativo termina, posso mover o arquivo manualmente sem problemas. Eu tentei várias coisas, como definir explicitamente Pooling=false
Na string de conexão, chamando manualmente Close
Antes da disposição da conexão, iniciando e cometendo uma transação explicitamente, mas nada disso parece ajudar. Existe uma maneira de forçar o sqlite a fechar/liberar o arquivo de banco de dados sem sair do aplicativo?
Solução
Eu presumo que você está usando Sqlite.net? Acabei de experimentar seu código e funciona sem problemas com o sqlite.net 1.0.65, no vs 2005 no Vista.
Outras dicas
DBCommand
é IDisposable
. Talvez você precise ligar Dispose
nele ou crie -o em um using
declaração.