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

C#SQLite DB无法打开,因为文件已加密或不是数据库,c#,sqlite,encryption,C#,Sqlite,Encryption,我有一个C#项目,该项目正在编辑来自另一个产品(不是我控制的产品)的现有SQLiteDB,我的问题是,当尝试在代码中打开DB时,我收到以下异常: 打开的文件不是数据库文件、文件已加密或不是数据库 所以我的假设是数据库是加密的,我将无法编辑它!但是,我使用了SQLite DB浏览器,DB打开时没有问题,也没有请求密码等 然后,我使用SQLite DB Browser对数据库进行加密,并将密码留空。完成此操作后,我现在可以在代码中连接到数据库,我的问题是,每当此第三方应用程序访问其数据库时,它都在对

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

所以我的假设是数据库是加密的,我将无法编辑它!但是,我使用了SQLite DB浏览器,DB打开时没有问题,也没有请求密码等

然后,我使用SQLite DB Browser对数据库进行加密,并将密码留空。完成此操作后,我现在可以在代码中连接到数据库,我的问题是,每当此第三方应用程序访问其数据库时,它都在对其进行操作,因为在重复上述步骤之前,我无法再次在代码中打开它

是否有任何线索表明是什么导致了这种行为?我在下面列出了我的代码片段:

            // 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";
        }
提前感谢,,
Luke

如果其他任何人在得到Puropoix的帮助和进一步调查后出现此问题,我发现如下情况:在十六进制查看器中打开DB时,前几行标题与我无法用代码打开的标题行和我可以打开的标题行不同(使用SQLite DB浏览器打开并删除“加密”后)我这样使用它,因为文件实际上没有被加密

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

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

我的假设是DB是加密的
不要假设,找出答案。在其他应用程序使用它之后,转到该文件并用十六进制查看器打开它,如果它不是太大,甚至用记事本打开它。如果它是加密的,它将看起来像中文字符。嗨,Proputix,谢谢你的回复。我已经用我的十六进制编辑器插件打开了DBn NotePad++和我能够看到未加密的信息。然后我尝试仅使用NotePad++查看文本以及Contracts.db和Contracts-SetBlankEncyption.db之间的差异,内容上有明显的差异,但两者都是可读的。我所说的blank encyption是指使用SQLite db浏览器删除加密设置一个空白密码。如果你能看到可识别的数据,它没有加密。当你试图使用一个未加密的数据库,但你在康涅狄格州有一个PW时,会引发异常。好的,非常好,谢谢,我不知道数据库浏览器是如何绕过密码的!我会进一步调查,我有它的源代码DB浏览器,因为它是开源的,我可以看一下。再次感谢你,卢克