Вот как я создаю базу данных и добавляю пароль:
SQLiteConnection.CreateFile(filePath + "/" + username + ".sqlite");
dbconnection = new SQLiteConnection("Data Source=" + filePath + "/" + username + ".sqlite;Version=3;");
dbconnection.Open();
dbconnection.ChangePassword(password);
sychroniseDb("Create");
Вот как я могу проверить, могу ли я подключиться к базе данных:
try{
dbconnection = new SQLiteConnection("Data Source=" + filePath + "\\" + username + ".sqlite;Version=3; Password=" + password + ";");
localDbConnected = true;
dbconnection.Open();
return true;
}
catch
{
MessageBox.Show("User or password incorrect");
localDbConnected = false;
return false;
}
Проблема во всем этом состоит в том, что даже если пароль неверен, он все еще проходит Try и не входит в Catch и даже открывает соединение. Dll - это пакеты Nuget. У меня есть Visual Studio Express 2013.
Реальная проблема заключается в том, что когда я делаю запрос, он говорит, что я зашифрован, или это не база данных, но почему она проходит, чтобы попытаться поймать?
На веб-сайте Sqlite он сообщает, что если это неправильно, он не должен соединяться.
У меня такая же проблема. Для исключения исключений должны быть сделаны некоторые команды. Попробуйте следующий код:
try
{
var dbPath = Path.Combine(filePath, (username + ".sqlite"));
var csb = new SQLiteConnectionStringBuilder { DataSource = dbPath, Version = 3, Password = password };
dbconnection = new SQLiteConnection(csb.ConnectionString);
dbconnection.Open();
//COMMENT: Any command to check whether the database is encrypted
using (SQLiteCommand command = new SQLiteCommand("PRAGMA schema_version;", dbconnection))
{
var ret = command.ExecuteScalar();
}
localDbConnected = true;
return true;
}
catch(SQLiteException)
{
MessageBox.Show("User or password incorrect");
localDbConnected = false;
return false;
}
Согласно документации System.Data.SQLite, SQLiteConnection реализует System.Common.DbConnection.
SQLite implentation of DbConnection.
For a list of all members of this type, see SQLiteConnection Members .
System.Object MarshalByRefObject
Component
DbConnection
SQLiteConnection
public sealed class SQLiteConnection : DbConnection, ICloneable
Документация MSDN гласит:
Примечания для наследующих лиц Когда вы наследуете DbConnection, вы должны переопределить следующие члены: Close, BeginDbTransaction, ChangeDatabase, CreateDbCommand, Open и StateChange. Вы также должны предоставить следующие свойства: ConnectionString, Database, DataSource, ServerVersion и State.
В DbConnection.Open документация MSDN гласит:
Открывает соединение с базой данных с настройками, заданными ConnectionString.
Таким образом, разработчикам имеет смысл проверять только пароль, когда вы действительно открываете dbconnection. Не в конструкторе.