【问题标题】:Why doesn't SqliteConnection open the connection?为什么SqliteConnection 不打开连接?
【发布时间】:2020-09-03 19:43:47
【问题描述】:

我试图在 Chrome 中创建一个保存的密码阅读器,但是当我在 Sqllite 中打开连接时它失败了var conn 不为空。我能注意到的唯一错误是 ServerVersion =

的异常
public IEnumerable<CredentialModel> ReadPasswords()
{
    var result = new List<CredentialModel>();

    var appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    var p = Path.GetFullPath(appdata + LOGIN_DATA_PATH);

    if (File.Exists(p))
    {
        using (var conn = new SqliteConnection($"Data Source={p};"))
        {
            conn.Open();
            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "SELECT action_url, username_value, password_value FROM logins";
                using (var reader = cmd.ExecuteReader())
                {

                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            var pass = Encoding.UTF8.GetString(ProtectedData.Unprotect(GetBytes(reader, 2), null, DataProtectionScope.CurrentUser));

                            result.Add(new CredentialModel()
                            {
                                Url = reader.GetString(0),
                                Username = reader.GetString(1),
                                Password = pass
                            });
                        }
                    }
                }
            }
            conn.Close();
        }

    }
    else
    {
        throw new FileNotFoundException("Canno find chrome logins file");
    }
    return result;
}

【问题讨论】:

  • 错误消息中的conn.ServerVversion 是错字还是实际消息?如果不是拼写错误,就会多出一个v。不过,我在您发布的内容中没有看到该代码。
  • 您使用的是最新的 SQL 驱动程序吗? Net 驱动程序可能与 chrome 驱动程序不同。您可能有一个旧的 SQLLite 驱动程序。请参阅:connectionstrings.com/sqlite
  • @FrancescoBuscicchio 这没有任何意义。仅仅因为无法在监视窗口中读取属性并不意味着该类已损坏。您是否在代码中遇到异常? Exception.ToString() 返回的确切文本是什么?您是否因为连接字符串无效而出现异常?
  • @FrancescoBuscicchio 这不是异常的文本,它是由 Message 部分生成的 JSON 字符串。发布 full 异常文本。这包括发生错误的确切行以及导致错误的调用链。
  • 请在查询本身中发布完整的异常文本,而不仅仅是其中的一部分。您确定路径正确吗?你检查过p 的值吗? Environment.GetFolderPath 不返回尾随 \`. Use Path.Combine` 来创建路径

标签: c# sqlite


【解决方案1】:

您的项目引用了Microsoft.Data.Sqlite.Core,这也需要设置which native SQLite library to use。 在您的情况下,本机 SQLite 驱动程序似乎设置不正确。

为了更轻松的体验,请参考 Microsoft.Data.Sqlite,它预先配置了要使用的 SQLite。

Source

【讨论】:

  • 如果我添加 Version = 3 它会进入异常(不支持关键字:'version'。)
  • 我检查了其他一些answers,似乎 Version=3 是一个有效的关键字。您使用的是哪个 sqlite 驱动程序/版本?
  • 我正在使用 Microsoft.Data.Sqlite.Core.3.1.7
  • @FrancescoBuscicchio 查看我的更新答案。基本上你应该使用Microsoft.Data.Sqlite.3.1.7 而不是Microsoft.Data.Sqlite.Core.3.1.7
  • @FrancescoBuscicchio 如果对您有帮助,请将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 2019-03-08
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多