frequent 2024-04-26 12:43 采纳率: 20%
浏览 181
已结题

sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?

我先打开了一个加密数据库test.db,然后将另外一个数据库文件abc.db附加到这个数据库中,abc.db的密码是123456,并且手工用数据库读取软件,并输入该密码后可以打开这个数据库文件,说明密码没有错。但我执行附加语句时,却返回26,返回值代表的意思是File opened that is not a database file,请问这是什么原因呢?代码如下:


sqlite3_open(“D:\\test.db", &db);
sqlite3_key(db, ”123456“, 6);
char chAttach[500];
sprintf_s(chAttach,500,"ATTACH DATABASE 'D:\\abc.db' AS 'db2' KEY '%s'","123456");
int nRet=sqlite3_exec(db, (const char*)chAttach, NULL, NULL, NULL);
if ( nRet!= SQLITE_OK) //调试发现这里nRet为26
{
    MessageBox(NULL,"Failure","",MB_OK);
}
  • 写回答

21条回答 默认 最新

  • 阿里嘎多学长 2024-04-26 12:43
    关注
    获得0.15元问题酬金

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【问题概括】:这个问题的目的是要解决在使用SQLite附加(attach database)功能时,尝试附加一个已知密码正确的加密数据库文件,但操作失败并返回错误代码26("file is not a database")的问题。

    【问题出现原因】:根据标题、详细内容,问题可能出现的原因有:

    1. SQLite附加数据库时,可能没有正确处理加密数据库的密码。
    2. 附加数据库的语法或参数可能有误。
    3. SQLite版本或配置问题,导致无法正确识别或处理加密数据库。

    【问题解决方案】:基于问题概括和分析,以下是解决步骤:

    1. 确保SQLite支持附加加密数据库的功能。
    2. 检查附加数据库的语法是否正确,特别是密码的使用方式。
    3. 确认SQLite库是否为最新版本,以及是否支持加密数据库操作。

    【提供代码】:根据搜索结果【3】【4】【1】,以下是修改后的代码示例,它展示了如何正确地附加一个加密的数据库:

    #include <sqlite3.h>
    #include <windows.h>
    
    int main() {
        sqlite3 *db;
        sqlite3_open("D:\\test.db", &db);
        // 使用正确的密码打开加密的数据库
        sqlite3_key(db, "123456", -1); // 注意:-1 表示密码长度
    
        // 准备附加数据库的SQL语句
        char chAttach[500];
        sprintf_s(chAttach, 500, "ATTACH DATABASE 'D:\\abc.db' AS db2 KEY '123456'");
    
        // 执行附加数据库的SQL语句
        int nRet = sqlite3_exec(db, chAttach, NULL, NULL, NULL);
        if (nRet != SQLITE_OK) {
            // 显示错误信息
            MessageBox(NULL, "Failure", "", MB_OK);
        } else {
            // 成功附加数据库后的操作...
        }
    
        // 关闭数据库连接
        sqlite3_close(db);
        return 0;
    }
    

    【代码运行方式】:此代码为C++代码,需要在支持C++开发的IDE或编译环境中运行,如Visual Studio。确保链接了正确的SQLite库。

    【代码预期运行结果】:如果代码正确无误,并且SQLite库支持附加加密数据库的操作,预期将成功附加数据库,不会出现错误消息框。

    【推荐相关链接】:

    1. SQLite官方文档关于附加数据库的说明:SQLite ATTACH DATABASE【1】
    2. 菜鸟教程关于SQLite附加数据库的教程:SQLite 附加数据库【3】
    3. GitHub上关于SQLite附加数据库的讨论:SQLite Error 26【6】
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 修改了问题 4月26日
  • 创建了问题 4月26日