求助:如何解决c#多线程写入sqlite的 SQLite error (5): database is locked 错误? 多线程sqlitec# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sqlite threading mode set to Serialized 请问如何设置呢? 是否需要重新编译sqlite 还是直接在程序语句中写代码实现 ?可否详细说一下 谢谢 你这资源占用得多高啊,在循环中连续生成Command对象。而且重复生成,有的根本没有用。还多线程调用,设计思路混乱。 设计的问题用设计技巧很难彻底解决,这儿解决了,其他地方也会出问题,就像战略问题无法用战术方法解决一样。 还是先进行系统分析,重新设计下你的软件吧。 建议系统的学习下数据库编程,而不是看几个例子就写代码。 针对你的代码,提几个建议: 1、command对象在循环外生成一个就够了,在需要的地方改变commandText 就可以了; 2、少用拼接字符串方式生成SQL语句,多用Parameters.Add(); 3、数据库尽量不要并发操作,确需并发,考虑数据库锁问题。关于SQLite锁,参考: http://my.oschina.net/u/587236/blog/129022 4、没看到你的数据库设计,总感觉味道不是很好。 5、既然参数object workmode是字符型,为什么不直接设为string?其他地方要用到其他数据类型?这个设计 啰嗦好多,没有恶意,都是从新手来的,说得不对的地方,多包涵。 请问如何设置呢? 是否需要重新编译sqlite 还是直接在程序语句中写代码实现 ?可否详细说一下 谢谢 你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升? 3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型 3、你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升? 3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型==========================================================2、除了防注入外,性能有一定提升,还有,图像、二进制等拼接SQL无法完成,用Parameters就很方便。3、没研究过SQLite的锁,抱歉。5、建议你将这一个函数拆分成两个函数。 sqlite锁了。记住:sqlite是写独占,读并发。如果有写操作,一定要做好线程同步(甚至进程同步)。否则其默认的生为在报锁的时候立即返回,而不是重试,这个时候你就得想办法保证数据的一致性了。在有写操作的时候,注意加锁或临界区,你可以选择在失败的时候重试,当然具体的手段就看你自己的实现了。 Date大小比较问题 Socket 接收数据过程中的几个小问题。 怎样显示查询结果? 请教一个基础问题,谢谢 c#和sqldmo,已经可以取得服务器上的目录,但是怎么取得目录下的文件呢 我的版权问题 help~!水晶报表问题 高分求算法! c# 请解答,谢谢! 哪路高手能帮我解释什么是事件 新人求教 wcf的service客户端代理类用注入实例化是否有意义? 怎样取消SelectedIndexChanged事件?
设计的问题用设计技巧很难彻底解决,这儿解决了,其他地方也会出问题,就像战略问题无法用战术方法解决一样。
还是先进行系统分析,重新设计下你的软件吧。
建议系统的学习下数据库编程,而不是看几个例子就写代码。 针对你的代码,提几个建议:
1、command对象在循环外生成一个就够了,在需要的地方改变commandText 就可以了;
2、少用拼接字符串方式生成SQL语句,多用Parameters.Add();
3、数据库尽量不要并发操作,确需并发,考虑数据库锁问题。关于SQLite锁,参考:
http://my.oschina.net/u/587236/blog/129022
4、没看到你的数据库设计,总感觉味道不是很好。
5、既然参数object workmode是字符型,为什么不直接设为string?其他地方要用到其他数据类型?这个设计
啰嗦好多,没有恶意,都是从新手来的,说得不对的地方,多包涵。
请问如何设置呢? 是否需要重新编译sqlite 还是直接在程序语句中写代码实现 ?可否详细说一下 谢谢
你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升? 3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型
你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升? 3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型
==========================================================
2、除了防注入外,性能有一定提升,还有,图像、二进制等拼接SQL无法完成,用Parameters就很方便。
3、没研究过SQLite的锁,抱歉。
5、建议你将这一个函数拆分成两个函数。
记住:sqlite是写独占,读并发。
如果有写操作,一定要做好线程同步(甚至进程同步)。否则其默认的生为在报锁的时候立即返回,而不是重试,这个时候你就得想办法保证数据的一致性了。
在有写操作的时候,注意加锁或临界区,你可以选择在失败的时候重试,当然具体的手段就看你自己的实现了。