c#使用sqlite1.0.97.0版本,
string dbFile = @"G:\test.db"; string connenctStr = string.Format(@"Data Source={0};Pooling=true;FailIfMissing=false",dbFile); sqliteConnection m_Connection = new sqliteConnection(connenctStr); m_Connection.open(); using (var com = m_Connection.CreateCommand()) { com.CommandText = @"select 1"; com.ExecuteNonQuery(); } m_Connection.Close(); m_Connection.dispose(); try { File.Delete(dbFile); } catch (Exception e) { throw e; }
执行代码,在删除文件时提示:
An unhandled exception of type 'System.IO.IOException' occurred in Testsqlite.exe
Additional information: 文件“G:\test.db”正由另一进程使用,因此该进程无法访问此文件。
异常。
原因是sqlite在执行sqliteConnectionHandle.dispose()
操作时候,其实并没有真正的释放连接,只有显式调用CLR垃圾回收之后才能真正释放连接。
参考连接 stackoverflow 问答,http://stackoverflow.com/questions/8511901/system-data-sqlite-close-not-releasing-database-file,但是即使按
照answer中给出的答案加上GC.Collect();仍然报同样异常。
还需要加上GC.WaitForPendingFinalizers()这句。参考上述博客中11楼的回答。
string dbFile = @"G:\test.db"; string connenctStr = string.Format(@"Data Source={0};Pooling=true;FailIfMissing=false",dbFile); sqliteConnection m_Connection = new sqliteConnection(connenctStr); m_Connection.open(); using (var com = m_Connection.CreateCommand()) { com.CommandText = @"select 1"; com.ExecuteNonQuery(); } m_Connection.Close(); m_Connection.dispose(); GC.Collect(); GC.WaitForPendingFinalizers(); try { File.Delete(dbFile); } catch (Exception e) { throw e; }运行正常
原文地址:https://www.jb51.cc/sqlite/199575.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。