解决方案 »

  1.   

    sqlite threading mode set to Serialized
      

  2.   

    请问如何设置呢?   是否需要重新编译sqlite 还是直接在程序语句中写代码实现 ?可否详细说一下 谢谢
      

  3.   

             你这资源占用得多高啊,在循环中连续生成Command对象。而且重复生成,有的根本没有用。还多线程调用,设计思路混乱。
            设计的问题用设计技巧很难彻底解决,这儿解决了,其他地方也会出问题,就像战略问题无法用战术方法解决一样。
            还是先进行系统分析,重新设计下你的软件吧。
            建议系统的学习下数据库编程,而不是看几个例子就写代码。        针对你的代码,提几个建议:
            1、command对象在循环外生成一个就够了,在需要的地方改变commandText 就可以了;
            2、少用拼接字符串方式生成SQL语句,多用Parameters.Add();
            3、数据库尽量不要并发操作,确需并发,考虑数据库锁问题。关于SQLite锁,参考:
                http://my.oschina.net/u/587236/blog/129022
            4、没看到你的数据库设计,总感觉味道不是很好。
            5、既然参数object workmode是字符型,为什么不直接设为string?其他地方要用到其他数据类型?这个设计
            啰嗦好多,没有恶意,都是从新手来的,说得不对的地方,多包涵。
      

  4.   


    请问如何设置呢?   是否需要重新编译sqlite 还是直接在程序语句中写代码实现 ?可否详细说一下 谢谢 
      

  5.   


    你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升?  3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型
      

  6.   

    3、
    你好,非常感谢你的指正。 1、针对第一条 command对象的问题,我已经按你所说的改成改变commandText 了。2、多用Parameters.Add是为了防止被注入么?有没有性能上的提升?  3、这篇资料我完全看不懂啊,可否给些c#的实例代码?非常感谢。5、其他地方要用到object数据类型
    ==========================================================
    2、除了防注入外,性能有一定提升,还有,图像、二进制等拼接SQL无法完成,用Parameters就很方便。
    3、没研究过SQLite的锁,抱歉。
    5、建议你将这一个函数拆分成两个函数。
      

  7.   

    sqlite锁了。
    记住:sqlite是写独占,读并发。
    如果有写操作,一定要做好线程同步(甚至进程同步)。否则其默认的生为在报锁的时候立即返回,而不是重试,这个时候你就得想办法保证数据的一致性了。
    在有写操作的时候,注意加锁或临界区,你可以选择在失败的时候重试,当然具体的手段就看你自己的实现了。