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

C#中无法DETACH SQLite数据库问题求助

解决SQLite DETACH数据库失败的问题

你遇到的这个问题其实是SQLite DETACH命令的使用误区——你用了数据库文件路径来执行DETACH,但实际上SQLite要求用ATTACH时指定的别名。

问题原因分析

当你执行这条ATTACH命令时:

sqlAttachCommand = "ATTACH database '" + fileLoc + "' AS toMerge";

你给这个附加的数据库起了一个别名toMerge,在当前SQLite连接中,这个数据库的标识就是toMerge,而不是原文件路径C:\temp\database.db。所以当你用文件路径执行DETACH时:

sqlAttachCommand = "DETACH database '" + fileLoc + "'";

SQLite会去寻找**别名为C:\temp\database.db**的数据库,自然找不到,于是抛出no such database的错误。

修正后的代码

把DETACH命令改成使用ATTACH时的别名toMerge即可:

// 附加数据库
var connection = new SQLiteConnection(yourMainDbConnectionString);
connection.Open();
string sqlAttachCommand = $"ATTACH database '{fileLoc}' AS toMerge";
var cmd = new SQLiteCommand(sqlAttachCommand, connection);
cmd.ExecuteNonQuery();

// 这里执行数据复制操作...

// 分离数据库(使用别名)
string sqlDetachCommand = "DETACH database toMerge";
cmd = new SQLiteCommand(sqlDetachCommand, connection);
cmd.ExecuteNonQuery();

额外注意事项

  • 别名要确保唯一,不要和SQLite默认的数据库别名(比如主数据库main、临时数据库temp)重复
  • 如果不确定当前连接中有哪些附加的数据库,可以执行PRAGMA database_list查询,结果里的name列就是数据库别名
  • 执行DETACH前要确保没有针对该数据库的未提交事务,否则会导致操作失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:39:34