You need to enable JavaScript to run this app. Linux环境Mono运行C#程序时Mono.Data.SqliteClient无法打开gmdb数据库问题
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境Mono运行C#程序时Mono.Data.SqliteClient无法打开gmdb数据库问题

问题修复方案

核心原因

  • Mono默认自带的Mono.Data.SqliteClient库版本老旧,内置低版本SQLite引擎,不会调用你系统安装的新版sqlite3,解析逻辑与当前主流SQLite版本不兼容
  • 旧版Mono.SqliteClient默认对非.db后缀的数据库文件优先走加密校验逻辑,会误将正常的gmdb数据库判定为加密/非法文件
  • 你当前使用的URI格式连接字符串不符合Mono下的SQLite解析规则,路径识别异常也会导致文件读取失败

修复步骤

1. 替换Sqlite依赖包

直接弃用系统自带的Mono.Data.SqliteClient,改用跨平台兼容的System.Data.SQLite.Core或者Microsoft.Data.SqliteNuget包,这两个包都会自动适配对应系统的原生sqlite3库,和你本地安装的sqlite3、SQLite浏览器调用的引擎版本一致,不会出现识别差异。

2. 修正连接字符串格式

Mono环境下的SQLite连接字符串无需使用URI前缀,直接指定Data Source参数即可,参考格式:

Data Source=/完整路径/Data.gmdb;Version=3;

如果需要跨平台兼容,可在代码中通过Path.Combine()动态生成对应系统的文件路径后传入连接字符串。

3. 兜底兼容配置

如果修改后仍然报错,可先通过系统sqlite3命令查询数据库的页大小:
sqlite3 Data.gmdb "PRAGMA page_size;"
将查询到的页大小参数加到连接字符串中即可:

Data Source=/完整路径/Data.gmdb;Version=3;Page Size=查询到的数值;

内容的提问来源于stack exchange,提问作者zimopisec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:57:04