我有一个用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();
第一行,如果每次运行文件时创建一个新文件都会被覆盖。
SQLiteConnection.CreateFile("MyDatabase.db");
将创建语句包装在if
块中,而不是检查该文件是否存在于磁盘上。
if (!System.IO.File.Exists("MyDatabase.db"))
{
SQLiteConnection.CreateFile("MyDatabase.db");
// continue your creation script here
}
创建或覆盖指定路径中的数据库文件。这只是创建一个零字节文件,当文件正确打开时,SQLite将变成一个数据库。请注意,现有文件将被覆盖。
IDisposable
块中实现using
的任何其他实例包装起来,以确保始终释放外部资源。可能是因为你在重新运行程序时正在创建表吗?