zoukankan      html  css  js  c++  java
  • 在使用sqlite时淌过的坑

    以前一直用sqlite.net 1.0.66.0版本,在.net4下面程序写好了部署到目的地机器时winform程序总是出现缺少运行时的问题。有时装了运行时也还是出问题,后来发现是混合模式的问题,当时是增加以下配置解决的:

    <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
     </startup>
    

    事隔一年后,使用sqlite.net 1.0.89.0又遇到这个问题,这次加了这个也没效果,而且不报错提示缺少dll等错误,单单抓到报“System.Threading.ThreadExceptionEventArgs”尼玛我人品差啊,这是何错误,这个异常的范围很广的有木有! 下载运行时安装了跑demo正常,但是程序还是报错。

    问题锁定

    肯定还是配置问题。经过一番艰苦排查,终于发现是使用了EF for sqliite,必须在配置文件理加入以下节点:

    <system.data>
        <DbProviderFactories>
          <remove invariant="System.Data.SQLite"/>
          <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.89.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        </DbProviderFactories>
      </system.data>
    

      

    总结

    人品有问题啊,老是解决了问题不求甚解不去找原理,这不科学啊!

    原因是EF使用SQLite Data Provider在构造DbProviderFactories时需要从配置里读取sqlite的版本等信息,然后才能正常实例化ObjectContext对象。

    另外,还遇到妖怪的事:

    using (ScanLocalDbEntities db = new ScanLocalDbEntities(dbConnStr))
                {
                    db.DBExecute("delete from ImportPrdSKU_Info");
                    db.DBExecBatchSQL(sqls);
                    System.Threading.Thread.Sleep(300);        
                    db.Refresh(System.Data.Objects.RefreshMode.StoreWins,db.SKU_Info);                
                    db.Connection.Close();
                }
    

    using之后用文件流操作那数据库文件,老说有另一个线程占用。难道是没Close Connect?关闭了也不行。超出我常识了,晕了。基础不好啊,到底会写程序不大哥?!

    加了个 GC.Collect();正常了...

  • 相关阅读:
    MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端
    pathlib:优雅的路径处理库
    MySQL索引连环18问
    Mysql 百万级数据迁移实战笔记
    强大的Json解析工具 Jsonpath 实战教程
    JavaScript 中的 Var,Let 和 Const 有什么区别
    【前端安全】从需求分析开始,详解前端加密与验签实践
    vue3开发企业级生鲜系统项目
    mysql随笔
    shiro相关Filter
  • 原文地址:https://www.cnblogs.com/datacool/p/datacool_sqlitenet_usehis_2013.html
Copyright © 2011-2022 走看看