[sqlsugar]不知道是不是bug 返回
autocad二次开发中,平台net8.0,autocad2026;采用的包是:system.data.sqlite和sqlsugar;
很简单的查询sqlite中数据库中的所有表名,sqlsugar数据库连接错误,freesql连接没问题,下面是简单代码
//sqlsugar
public string[] GetNames()
{
string pathx = Path.Combine(Environment.CurrentDirectory, "My.db");
using SqlSugarClient client = new SqlSugarClient(
new ConnectionConfig()
{
DbType = DbType.Sqlite,
ConnectionString = $"Data Source={pathx};",
IsAutoCloseConnection = true
}
);
return client.DbMaintenance.GetTableInfoList().Select(t => t.Name).ToArray();
}
//freesql
public string[] GetNames2()
{
string pathx = Path.Combine(Environment.CurrentDirectory, "My.db");
// 创建 FreeSql 实例
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, $"Data Source={pathx}")
.Build();
// 查询所有表名
return fsql.DbFirst.GetTablesByDatabase().Select(t => t.Name).ToArray();
}
没有刻意比较的意思,因为之前用的是sqlsugar(.netframework4.8和cad2024),换成.net8新平台了,结果sqlsugar报错了,折腾一下午,用freesql马上没问题了。(非常奇怪,因为同样sqlsugar的包在console app中测试没有任何问题,就是放在cad二开类库中就不行了)
有谁能告诉我应该用哪些个包组合吗?
热忱回答(19)
-
徐有元 VIP0
2025/9/27抛出的异常:SqlSugar.SqlSugarException:“中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception. Exception has been thrown by the target of an invocation.. English Message : Connection open error . The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception. Exception has been thrown by the target of an invocation. ”
0 回复 -
徐有元 VIP0
2025/9/27还是喜欢sqlsugar,freesql的查询写法:
return fsql.Select<FXDQ>().AsTable((_, __) => tableName).ToList();
这什么玩意,太逆天了吧
0 回复 -
fate sta VIP0
2025/9/28这个不是BUG,是驱动不一样
2.The type initializer for ..
The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception
出现这个错一般是安装问题
(1) 独立安装 Microsoft.Data.Sqlite每个类都统一最新版本(先卸载sqlsugarcore)
(2) 如是发布Linux找不到文件报这个错 ( 发布不要用裁剪 )
(2.1)用户解决方案 https://www.donet5.com/Ask/9/23442
(2.2)用较高版本 Linux版本自带装好sqlite3的 比如:华为欧拉openEuler 22.03 (LTS-SP3)
不要用停止维护的Linux版本,如果用了就比较麻烦需要看 2.1方案补上缺失文件
0 回复 -
fate sta VIP0
2025/9/28sqlsugar是用的 官方推荐的 Microsoft.Data.Sqlite 这个驱动
保证new SqliteConnection(字符串).Open() 不报错 ORM就可以用。
0 回复 -
fate sta VIP0
2025/9/28而System.data.sqlite .NET 中是不推荐用的。属于过时的东西。
0 回复 -
fate sta VIP0
2025/9/28另外NUGET安装的是sqlsugarcore (.net core到.net 9) ,而不是安装sqlsugar (.net framework)
0 回复 -
徐有元 VIP0
2025/9/28因为是net8.0,用的是sqlsugarcore+system.data.sqlite,试过sqlsugarcore+ Microsoft.data.sqlite,都不行
0 回复 -
徐有元 VIP0
2025/9/28在console 中,用sqlsugarcore+system.data.sqlite,试过sqlsugarcore+ Microsoft.data.sqlite, 都可以的
0 回复 -
fate sta VIP0
2025/9/28你可能还没搞明白sqlsugarcore只依赖 Microsoft.data.sqlite 。不依赖 system.data.sqlite
哪怕你引用了system.data.sqlite也是用的 Microsoft.data.sqlite
0 回复 -
fate sta VIP0
2025/9/28new SqliteConnection(字符串).Open() ;//不报错 ORM就可以用。
发布后保证这行代码能跑就行,不能跑就看什么错误,网上有解决方案
明白了吗?
0 回复 -
fate sta VIP0
2025/9/28efcore和sqlsugar都是基于Microsoft.data.sqlite开发的。并不推荐用system.data.sqlite。
0 回复 -
徐有元 VIP0
2025/9/29我说了好多遍了,用sqlsugarcore+Microsoft.data.sqlite.core也不行,
我又重重新试了一遍重建新项目,错误信息没变
0 回复 -
fate sta VIP0
2025/9/29在不用ORM情况,下面这行代码不报错。
var conn= new Microsoft.Data.Sqlite.SqliteConnection("字符串"); conn.Open();//发布后这行代码要能执行ORM就能用也就是原生的驱动代码能正常使用,那么ORM就可以用。
如果原生代码也不能用,那就网上找一下驱动连接失败的的原因。
一般都有解决方案。
0 回复 -
徐有元 VIP0
2025/9/29varconn=newMicrosoft.Data.Sqlite.SqliteConnection("字符串");conn.Open();运行不了
System.TypeInitializationException:“The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception.”
DllNotFoundException: Unable to load DLL 'e_sqlite3' or one of its dependencies: 找不到指定的模块。 (0x8007007E)
0 回复 -
fate sta VIP0
2025/9/29发布选项怎么配置的。
0 回复 -
fate sta VIP0
2025/9/29不要用裁剪发布可能没打包进去。
0 回复 -
fate sta VIP0
2025/9/29或者项目升级到.NET9试一下。Microsoft.Data.Sqlite 最新版本可能和.NET9适配更好。
0 回复 -
徐有元 VIP0
2025/9/29没有发布,生成dll 然后再autocad2026下导入运行,autocad 不支持net9
0 回复 -
fate sta VIP0
2025/9/29确保 SQLite 本地库已正确安装:
Microsoft.Data.Sqlite库需要依赖e_sqlite3.dll,这个 DLL 是 SQLite 的本地实现。如果你的应用运行在 Windows 上,确保你的系统中已经安装了这个 DLL。你可以从 SQLite 官网 下载并放置e_sqlite3.dll到你的应用目录或系统路径中。确认 x64 或 x86 架构一致:
确保e_sqlite3.dll与你应用的目标架构匹配。如果你的应用是 x64 架构,那么你需要使用 x64 版本的e_sqlite3.dll。同理,如果是 x86 架构,也要使用对应的版本。
这个你研究一下吧,这个是驱动问题和ORM关系不大。
目前EFCore也是用的Microsoft.Data.Sqlite , System.Data.Sqlite已经不推荐用了
0 回复