起因: 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 就没问题

 

posted on 2022-03-08 22:27  Gu  阅读(318)  评论(0编辑  收藏  举报