sqlite异常:链接close()和dispose()之后任然不能释放与db文件的连接
2015-06-08 16:20
393 查看
c#使用sqlite 1.0.97.0版本,
执行代码,在删除文件时提示:
An unhandled exception of type 'System.IO.IOException' occurred in TestSqlite.exe
Additional information: 文件“G:\test.db”正由另一进程使用,因此该进程无法访问此文件。
异常。
原因是sqlite在执行
参考连接 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(); 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; }
运行正常
相关文章推荐
- Oracle闪回查询(Oracle Flashback Query)
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
- Redis 集群部署
- Redis 集群部署
- SQL- select distinct
- SQL-select
- Mysql relay_log 命名规则
- SQL基础-语法
- Windowform 窗体关联数据库存储,读取图片,参考代码
- SQL左右连接中的on and和on where的区别
- mysql 触发器
- Oracle数据库中文乱码解决方法
- Oracle数据库的启动关闭的几种方式
- 存储过程output参数_数据库调用_C#_NET调用简单CODE
- SQL基础-简介
- 树形结构的数据库表Schema设计
- mysql添加用户和用户权限
- Windows下搭建MySQL Master Slave
- oracle translate函数
- SQL约束