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

