C#出现sqlite的database is locked的解决方法
来源:互联网 发布:自己编曲的软件 编辑:程序博客网 时间:2024/05/15 07:01
用C#和sqlite开发了一个小管理程序,但是最后测试的时候发现多次添加、删除时总会报错,database is locked,在由SQLiteConnection建立的SQLiteCommand对象执行ExcuteNonQuery()函数时抛出异常。
查了一下相关的内容,很有可能是因为sqlite对于并发改添删的执行很“粗鄙”,只提供库级锁,解决的方法是使用信号量-_-!但是我做的这个小程序要毛线并发管理,要毛线个锁。看到有人提示是连接没有关闭和销毁。
select语句中使用
(发文章没有C#代码风格的选项,我选择了Java)
try{ conn = new SQLiteConnection("Data Source=test.db"); conn.Open(); cmd = conn.CreatCommand(); cmd.CommandText="select * from haha"; reader = cmd.ExcuteQuery(); while(reader.Read()){ ... }}catch(Exception){}finally{ if(reader!=null) reader.Close(); if(cmd!=null)cmd=null; if(conn!=null)conn.Close();}
没有出错,但是移植在ExcuteNonQuery();增删改几次就不好用了。
百度“C# sqlite database is locked”前几页果然没有适合C#的方法,bing看到英文论坛上有个解决方法,就是使用C#的using语句对于资源的释放的特点,当语句完成后会自动关闭连接并销毁SQLiteConnection和SQLiteCommand,即使抛出异常也会自动销毁。
private int doNonQuery(string command){int ret = -1; using (SQLiteConnection conn = new SQLiteConnection("Data Source=jiancai.db")) {using (SQLiteCommand cmd = new SQLiteCommand(command, conn)) { cmd.Connection.Open(); ret = cmd.ExecuteNonQuery(); } }}
在调用函数中使用try...catch块包含调用语句进行异常管理。连续测试多次添加、修改、删除操作,没有再抛出locked异常
百度“C# sqlite database is locked”前几页果然没有适合C#的方法,bing看到英文论坛上有个解决方法,就是使用C#的using语句对于资源的释放的特点,当语句完成后会自动关闭连接并销毁SQLiteConnection和SQLiteCommand,即使抛出异常也会自动销毁。
0 0
- C#出现sqlite的database is locked的解决方法
- C#出现sqlite的database is locked的解决方法
- FMDB中出现的database is locked
- sqlite出现database is locked错误
- sqlite database is locked
- sqlite database is locked
- sqlite遇到database is locked问题的完美解决
- sqlite遇到database is locked问题的完美解决
- sqlite遇到database is locked问题的完美解决
- SQLite指南(6)-处理database is locked的方法
- sqlite遇到database is locked问题的完美解决
- sqlite遇到database is locked问题的完美解决方案
- sqlite遇到database is locked问题的完美解决
- SQLite并发访问出现The database file is locked , database is locked
- ERROR: SQLite database is malformed 的解决方法
- delphi中使用sqlite数据库出现database is locked问题
- 【C#】操作SQLite数据库出现database is locked解决办法
- ios sqlite database is locked
- 无法在虚拟机上安装X64操作系统的问题
- 网络流模板
- 毕设进程:postgreSQL操作入门
- 开发板串口打印信息改为显示在开发板触摸屏
- hadoop全方位资料整理
- C#出现sqlite的database is locked的解决方法
- 九度1085解题报告(机试出这种题我死定了)
- 在vs2010下使用QT
- html固定表头
- 从程序的入口了解方法
- 第十一天3月4日之JSP、EL表达式、el的11个隐式对象、jstl
- 全透明、可折叠,平板电脑概念机是这样的
- 打印4种不同角度的三角形,以九九乘法表为例
- Android获取当前正在运行的线程和使用的内存