【发布时间】:2019-11-25 14:03:57
【问题描述】:
我正在尝试创建一个与通过密码加密的 SQLite 数据库进行通信的程序。如果我尝试使用没有任何密码的数据库,它可以工作,但使用带有密码的数据库,在连接后,执行查询时会出现错误“文件不是数据库”。这是代码:
using Microsoft.Data.Sqlite;
using System;
using System.Data.SQLite;
...
string conn = "Data Source=C:\\Users\\Utente\\Desktop\\SQLite\\sqlite tools\\DB\\provapassword.db;";
SqliteConnection sql_conn = new SqliteConnection(conn);
sql_conn.Open();
Console.WriteLine("Connected to provapassword");
var cmd = sql_conn.CreateCommand();
cmd.CommandText = "SELECT quote($password);";
cmd.Parameters.AddWithValue("$password", "prova");
var quotedPassword = (string)cmd.ExecuteScalar();
cmd.CommandText = "PRAGMA key = " + quotedPassword;
cmd.Parameters.Clear();
cmd.ExecuteNonQuery();
try
{
//INSERT
string query = "INSERT INTO nomi values(10, \"AAA\")";
cmd.CommandText = query;
if (cmd.ExecuteNonQuery() != 0)
Console.WriteLine("OK");
else
Console.WriteLine("Error");
sql_conn.Close();
Console.WriteLine("Connection close");
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
你有什么建议吗?谢谢
【问题讨论】:
-
访问数据库的密码是into the connection string,而不是语句。
-
你是如何加密数据库的?一些 UI 浏览器工具使用与 SQLIte NET 提供程序不同的加密方法。另请访问connectionstrings.com/sqlite 获取连接字符串信息
-
@ŇɏssaPøngjǣrdenlarp 我使用 DB Browser for SQLCipher