繁体   English   中英

C#SQLite DB无法打开,文件已加密或不是数据库

[英]C# SQLite DB fails to open with file is encrypted or is not a database

我有一个C#项目正在从另一产品(不是我所控制的产品)中编辑现有的SQLiteDB,我的问题是,当尝试用代码打开数据库时,收到以下异常:“打开的文件不是数据库文件,文件已加密或不是数据库”

所以我的假设是数据库是加密的,我将无法对其进行编辑! 但是我使用了SQLite数据库浏览器,数据库打开没有问题,并且不要求输入密码等。

然后,我使用SQLite数据库浏览器对数据库进行加密,并在执行此操作后将密码留空。现在,我可以使用代码连接到数据库了,我的问题是,每次该第三方应用程序访问它的数据库时,我都会对数据库进行操作在重新执行以上步骤之前,无法再次在代码中打开它。

有什么线索可以导致这种行为吗?我在下面提供了我的代码片段:

            // Build the connection string.
            lstrFullConnectionString = @"Data Source =" + lstrDBPathAndFileName + "; Version=" + lstrDBVersion + "; New=" + lstrDBNew + ";";
        mobjSQLCon = new SQLiteConnection(lstrFullConnectionString);

        try
        {// Fails at connection open....
            mobjSQLCon.Open();
            lblConnectionStatus.Text = "Status: Connected";
            btnSQLiteConnect.Text = "Disconnect";
        }

预先感谢,卢克

万一在Plutonix的帮助和进一步的调查之后还有其他问题,我发现了以下内容:在Hex Viewer中打开数据库时,前几行标题行与我无法在代码中打开的行以及我可以打开的行不同(在使用SQLite DB浏览器打开并删除“加密”后,由于该文件实际上并未加密,因此我使用了它。

因此,解决方案是在二进制级别编辑文件以更改标题以使其匹配,现在我可以打开数据库了。 我用来更改文件的代码示例如下:

using (var lobjFileStream = new FileStream(pstrSQLiteDBPathAndFile, FileMode.Open, FileAccess.ReadWrite))
            {
                lobjFileStream.Position = 19;
                lobjFileStream.WriteByte(0x01);
            }

谢谢,卢克

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM