起因: Access在win10+ .netCore6.0 的情况下,出现找不到provider的情况,但是用.net framework4.6是正常的. 可能是我的Access安装的是32位的原因. 我也不想折腾安装office 64位了.
Sqlite 我下载了最新的3.38版本, 界面管理器下载了DB Browser for SQLite, SQLite的字段类型只有Integer(64位)和Text, 字段假如设为自动增长的话,它是自动生成一个sqlite——sequence的表里面,name=表名XXX,seq=当前次序
所以想把所有用到32bit的东西都迁移到64位,尝试了Sqlite, 可以. .netCore下载 Microsoft.Data.Sqlite; 这个是带底层Bundle的PCL.Raw包. 另外的Microsoft.Data.Sqlite是不带底层包.要另外下载, 但是在mac里要另外的SQLitePCLRaw.lib_e_sqlite3.osx
Connection = new SqliteConnection(cnStr); //引用Microsoft.Data.Sqlite 包,这个才包含SQLite3Provider_e_sqlite3的Provider访问程序 SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
这个库是不带SqlAdapter, 因为sqlite的列是动态类型的,它不想包装,可以手动自己写一个类
https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/adonet-limitations
https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/dapper-limitations
我试了一下, 这个版本是支持事务的
Connection.Open(); myTrans = Connection.BeginTransaction(); //如果你用SQLite 浏览工具编辑还没有应用更改,锁定状态下,无法开始事务 SqliteCommand command = new SqliteCommand(sql, Connection, myTrans); affectRows=command.ExecuteNonQuery(); myTrans.Commit();
把windows写好的.netcore代码 整个目录拷贝到Mac上Build,就会出现下面的错误
NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder 'C:\Program Files\dotnet\sdk\NuGetFallbackFolder'
或者 这个错误
The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception.
只要把bin目录,obj目录删掉, 重新unload/load project, 重新build一次就好了
=======================Sqlite 不能很好兼容net standard2.0==========================
我尝试把Sqlite的读写,放在一个net standard2.0的library里, 然后在.net6.0里可以正常访问Sqlite, 但是如果再新建一个net4.61的winform程序,引用net standard2.0的library, 就会出现
找不到SQLitePCLRaw.provider.e_sqlite3.dll的错误, 结果折腾了我一天. net4.61的winform直接引用Microsoft.Data.Sqlite, SQLitePCLRaw.bundle_e_sqlite3 就没问题