在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
相关产品推荐
相关产品推荐

