【发布时间】: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不返回尾随\`. UsePath.Combine` 来创建路径