【发布时间】:2015-01-28 03:39:58
【问题描述】:
我想用我的 WPF 项目向 SQLite 插入数据,我希望在单击按钮后,我可以将数据保存到 SQLite,这是我的代码。
private void AddToDB_Click(object sender, RoutedEventArgs e)
{
sqlite_Conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;");
sqlite_Conn.Open();
sqlite_Cmd = sqlite_Conn.CreateCommand();
sqlite_Cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
sqlite_Cmd.ExecuteNonQuery();
sqlite_Cmd.CommandText = "INSERT INTO test (id, text) VALUES (1,'Test Text 1');";
sqlite_Cmd.ExecuteNonQuery();
sqlite_Cmd.CommandText = "SELECT * FROM test";
sqlite_DataRdr = sqlite_Cmd.ExecuteReader();
while (sqlite_DataRdr.Read())
{
System.Console.WriteLine(sqlite_DataRdr["text"]);
}
sqlite_Conn.Close();
}
我的问题是,无论我点击多少次按钮,它只会存储1个数据,我认为问题是因为我每次点击按钮后都会创建一个新表,所以我改变了我的代码到:
if (!created)
{
sqlite_Cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
sqlite_Cmd.ExecuteNonQuery();
created = true;
}
但更糟的是,它只能成功执行1次,第二次按下按钮插入数据时,程序会停在
sqlite_Cmd.ExecuteNonQuery();
之后
sqlite_Cmd.CommandText = "SELECT * FROM test";
并显示 {"no such table: test"} 错误。
有没有人有什么好主意来解决这个问题?非常感谢!
【问题讨论】:
-
New=True???我想知道这是什么... -
@LasseV.Karlsen 不错,它重新创建了数据库。
-
id是主键,但您要插入具有相同 id 的多行,因此任何后续插入都将由于唯一性约束而失败。 -
@LasseV.Karlsen 哎呀!那是我的错……对不起,我的粗心,谢谢你的提醒!在将“New”更改为 False 并注释 sqlite_Cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));"; 后我已经解决了它sqlite_Cmd.ExecuteNonQuery();非常感谢!!
-
@UlugbekUmirov 感谢您的提醒!那是我的错,而你让它变得更加明显。非常感谢!
标签: c# sqlite database-table