c # sqlite не загружается после повторного открытия программы - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть простая программа, написанная на c #, и я использую SQLite для сохранения списка профилей (электронные письма, пароли). Все отлично работает, пока я не закрою программу и не открою ее снова. Когда я делаю это, таблица пуста. Этот код находится в моем конструкторе форм, который запускается первым при загрузке программы (это программа с одной формой, очень простая). Я использую библиотеку System.Data.SQLite . Я могу увидеть файл в папке моего проекта (bin / debug / ..). Кто-нибудь может объяснить, почему эта информация не сохраняется и не доступна для чтения при повторном открытии программы?

SQLiteConnection.CreateFile("MyDatabase.db");
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.db;Version=3;");
m_dbConnection.Open();
string sql = "CREATE TABLE " + profileTable + " (" + emailCol + " VARCHAR(320), " + passwordCol + " VARCHAR(30))";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "SELECT * FROM "+profileTable+" order by "+emailCol+" desc";
command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    emailProfileListBox.Items.Add(reader[emailCol] as String);
}

Вот мой оператор INSERT, который вставляет и был проверен.

string sql1 = "INSERT INTO "+profileTable+" ("+emailCol+", "+passwordCol+") VALUES (\'"+from_email_address.Text+"\', \'"+passwordTextBox.Text+"\')";
SQLiteCommand command1 = new SQLiteCommand(sql1, m_dbConnection);
command1.ExecuteNonQuery();

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Первая строка, если вы создаете новый файл при каждом запуске, файл будет перезаписан.

SQLiteConnection.CreateFile("MyDatabase.db");

Оберните оператор создания в блоке if, вместо этого проверяя, существует ли файл на диске.

if (!System.IO.File.Exists("MyDatabase.db")) 
{
   SQLiteConnection.CreateFile("MyDatabase.db");
   // continue your creation script here
}

См. документацию

Создает или перезаписывает файл базы данных по указанному пути. Это просто создает файл с нулевым байтом, который SQLite превратит в базу данных при правильном открытии файла. Обратите внимание, что существующий файл будет перезаписан.


Дополнительные примечания

  • Вы также должны обернуть свои соединения и любые другие случаи, когда тип реализует блоки IDisposable в using, чтобы гарантировать, что внешние ресурсы всегда высвобождаются.
  • Вы должны использовать параметризованные операторы для любых значений, которые вы им передаете. Поэтому ваши вставки, обновления и условия в ваших выборках должны использовать параметры для передачи значений.
  • Никогда не храните пароли, даже зашифрованные. Вместо этого создайте односторонний хэш пароля и сохраните его. Существует множество существующих библиотек / кодовых фреймов, которые могут сделать это для вас.
0 голосов
/ 11 сентября 2018

Может быть, потому что вы создаете таблицу при повторном запуске программы?

...