You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Xamarin迁移至.NET Maui时因SQL-Cipher问题无法创建数据库连接

.NET MAUI(.NET7.0)迁移SQLCipher加密数据库连接失败排查与解决

原Xamarin环境下的可用代码

在Xamarin项目中,可通过以下代码创建SQLCipher加密的数据库连接:

var options = new SQLiteConnectionString(dbPath, true, dbPassword, postKeyAction: c =>
{
    c.Execute("PRAGMA cipher_compatability = 3");
});

SQLiteConnection connection = new SQLiteConnection(options);

迁移到.NET MAUI后的错误信息

将上述代码迁移到.NET7.0的.NET MAUI项目后,无法正常运行,抛出以下异常:

SQLite.SQLiteException: file is not a database Result:
SQLite.SQLite3+Result.NonDBFile

使用的NuGet包版本

  • Xamarin项目:sqlite-net-sqlcipher 版本1.8.116
  • .NET MAUI项目:sqlite-net-pcl 版本1.8.116

问题原因与解决方案

核心原因

.NET MAUI项目中使用的sqlite-net-pcl包不包含SQLCipher加密支持,而Xamarin项目依赖的sqlite-net-sqlcipher是专门集成了SQLCipher的版本,二者底层实现不同,导致无法正确解密原加密数据库文件。

具体解决步骤

  1. 替换NuGet包
    卸载MAUI项目中的sqlite-net-pcl,安装sqlite-net-sqlcipher包(建议使用与Xamarin项目一致的1.8.116版本,或适配.NET7的最新兼容版本)。

  2. 修正PRAGMA语句拼写(可选)
    代码中cipher_compatability存在拼写错误,正确的SQLCipher语法应为cipher_compatibility,虽然旧版本可能兼容错误拼写,但修正后能避免潜在问题:

    c.Execute("PRAGMA cipher_compatibility = 3");
    
  3. 确保MAUI中数据库路径正确
    MAUI的文件系统访问逻辑与Xamarin略有差异,需使用MAUI提供的FileSystem类获取正确的应用数据路径,示例:

    string dbPath = Path.Combine(FileSystem.AppDataDirectory, "your_database.db");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:07:40