无法使用C#打开受密码保护的SQLite 3数据库

使用System.Data.SQLite使用密码保护的SQLite数据库时出现问题.

我正在使用用于SQLite的数据库浏览器来创建数据库并设置密码.使用DB Browser,我可以打开密码,输入密码查看数据,然后关闭数据库.

因此,对于.NET 4.6.2和System.Data.SqLite 1.0.105.2,以下代码段不起作用我不断收到“文件已加密或不是数据库”错误.

namespace licensekeygeneration
{
    using NLog;
    using NLog.Extensions.AzureTableStorage;
    using System;
    using System.Data.SQLite;
    using System.Linq;
    using System.Windows;

/// <summary>Interaction logic for App.xaml</summary>
public partial class App : Application
{
    /// <summary>Make sure that NLog is running</summary>
    private static Logger logger = LogManager.GetCurrentClassLogger();

    /// <summary>Run before the application starts up</summary>
    void App_Startup(object sender, StartupEventArgs e)
    {
        try
        {
            // Set link to the SQLite database and grab the logging endpoint
            string dataSource = @"Data Source=c:\users\fred\desktop\database.db;Version=3;Page Size=1024;Password=ABCD";
            SQLiteConnection conn = new SQLiteConnection(dataSource);

            DataContext LocalDB = new DataContext(conn);

            // Sets the target for NLog in code 
            string strNlog = LocalDB.GetTable<TblS3Settings>().Where(item => item.StrSettingName.Equals("NlogEndPoint") && item.BoolIsValid.Equals(true)).ToList().FirstOrDefault().StrSettingValue;
            var azureStorageTarget = (AzureTableStorageTarget)LogManager.Configuration.FindTargetByName("AzureTableStorage");
            azureStorageTarget.ConnectionString = strNlog;
        }
        catch (Exception ex)
        {
            // Problem with the database or the connection so error out
            MessageBox.Show("There is an issue with the internal database\n" + ex.Message, "Application", MessageBoxButton.OK, MessageBoxImage.Hand);
            Current.Shutdown();
        }

        // Logging OK and we have an attached database so lets start
        MainWindow.Show();
    }
}

如果我使用DB Browser for SQLite从数据库中删除密码,然后更改以下行:

string dataSource = @"Data Source=c:\users\fred\desktop\database.db;Version=3;Page Size=1024;";
SQLiteConnection conn = new SQLiteConnection(dataSource);

我得到了我期望的信息,并且生活很顺利,所以我是否缺少了System.Data.SQLite,因为我无法按预期工作.

如果有问题,我正在Windows 10 64Bit上使用Visual Studio 2017.

谢谢.

解决方法:

SQLiteConnection和用于SQLite的数据库浏览器使用不同类型的加密.您必须使用SQLiteConnection本身对数据库进行加密.不幸的是,之后您将无法使用数据库浏览器

查看encrypt with c#

我相信没有解决方案,而是您自己将加密实施到数据库浏览器中.已经有关于此主题的讨论,并且开发人员似乎并未计划实施:discussion here

上一篇:atcoder abc 226 F - Score of Permutations


下一篇:为安全起见,将新的String(char [])作为密码的参数传递给仅接受字符串作为参数的方法是否安全?