在使用sqlite时淌过的坑
SQLite 使用
2023-09-11 14:16:54 时间
以前一直用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();正常了...
相关文章
- 使用entityframework操作sqlite数据库
- Linux平台上SQLite数据库教程(一)——终端使用篇
- 在C#项目中使用SQLite(环境安装问题)
- QT+SQLite 判断表中是否含有指定字段
- AndroidStudio制作个人资料界面模块以及SQLite数据库的使用
- AndroidStudio制作个人资料界面模块以及SQLite数据库的使用
- XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox
- Xamarin SQLite教程Xamarin.iOS项目添加引用
- SQLite中的表达式
- SQLite中的SELECT子句使用通配符
- SQLite数据库中rowid使用
- Sqlite-SQLiteHelper类,操作SQLite数据库
- C#/Sqlite-单机Window 程序 sqlite 数据库实现
- SwiftUI SQLite 教程之 构建App本地数据库实现创建、读取、更新和删除(教程含完成项目源码)
- 借助 Python 发挥 SQLite 的强大功能:实用教程
- Python使用故事之 超过 Excel文件大小限制时推荐使用 SQLite
- SQLite这么娇小可爱,不多了解点都不行啊
- 如何使用 VBA 将 MDB 转换为 SQLite
- SQLite学习笔记之软件三个核心流程
- SQLite学习笔记之类和对象如何存储到数据中
- SwiftUI SQLite数据库存储使用教程大合集(2022年版)
- 使用 IntraWeb (43) - 测试读取 SqLite (二)
- FireDAC 下的 Sqlite [9] - 关于排序
- 【sqlite常用操作SQL语句】
- Android数据库开发——SQLite