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

在Microsoft.Data.Sqlite中ATTACH DATABASE失效(System.Data.Sqlite可正常运行)

解决Microsoft.Data.Sqlite中ATTACH DATABASE报错SQLite Error 14的问题

问题原因

System.Data.Sqlite与Microsoft.Data.Sqlite对SQLite URI格式的解析逻辑存在差异,默认情况下Microsoft.Data.Sqlite未启用URI模式,导致带file:前缀的ATTACH语句无法正确识别数据库路径;同时参数传递的方式也可能影响语句执行。

解决方案

1. 为主连接启用URI模式

创建主数据库连接时,修改连接字符串添加Uri=true参数,确保SQLite能正确解析URI格式路径:

// 示例主连接字符串
var connectionString = "Data Source=main.db;Mode=ReadWrite;Uri=true";
using var _conn = new SqliteConnection(connectionString);
_conn.Open();

2. 调整ATTACH语句写法

有两种可行方式:

  • 保留URI格式:主连接已启用URI模式时,可直接使用原语句(需确保文件存在且程序有读取权限):
using (var command = _conn.CreateCommand())
{
    var qAttach = @"ATTACH DATABASE 'file:C:\mydata\address.db?immutable=1' AS address";
    command.CommandText = qAttach;
    command.ExecuteNonQuery();
}
  • 使用WITH子句传参:无需依赖URI模式,兼容性更强:
using (var command = _conn.CreateCommand())
{
    var qAttach = @"ATTACH DATABASE 'C:\mydata\address.db' AS address WITH immutable=1";
    command.CommandText = qAttach;
    command.ExecuteNonQuery();
}

3. 额外检查项

  • 确认C:\mydata\address.db文件真实存在,且当前程序对该路径有读取权限;
  • 若为发布后的程序,排查是否存在路径部署问题(如相对路径错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:15:35