[英]insert data to SQLite with button_click in C#
我想通过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”}错误。
有谁有解决这个问题的好主意? 非常感谢!
过去,我主要处理SQL和MySQL,但是这两个都要求您为要传递的每个命令创建单独的SQLCommand。
相反,请尝试以下操作:
sqlite_Conn = new SQLiteConnection("Data Source=database.db;Version=3;New=True;Compress=True;");
sqlite_Conn.Open();
sqlite_CreateCmd = new SQLiteCommand();
sqlite_InsertCmd = new SQLiteCommand();
sqlite_QueryCmd = new SQLiteCommand();
sqlite_CreateCmd.Connection = sqlite_Conn;
sqlite_InsertCmd.Connection = sqlite_Conn;
sqlite_QueryCmd.Connection = sqlite_Conn;
var sqlite_CreateTran = sqlite_Conn.BeginTransaction();
var sqlite_InsertTran = sqlite_Conn.BeginTransaction();
sqlite_CreateCmd.Transaction = sqlite_CreateTran;
sqlite_InsertCmd.Transaction = sqlite_InsertTran;
sqlite_CreateCmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
sqlite_InsertCmd.CommandText = "INSERT INTO test (id, text) VALUES (1,'Test Text 1');";
sqlite_QueryCmd.CommandText = "SELECT text FROM test";
sqlite_CreateCmd.ExecuteNonQuery();
sqlite_InsertCmd.ExecuteNonQuery();
sqlite_DataRdr = sqlite_QueryCmd.ExecuteReader();
sqlite_CreateTran.Commit();
sqlite_InsertTran.Commit();
System.Console.WriteLine(sqlite_QueryCmd.ExecuteScalar());
sqlite_Conn.Close();
我知道了! 我将New
属性更改为False
并消除
sqlite_Cmd.CommandText = "CREATE TABLE test (id integer primary key, text varchar(100));";
sqlite_Cmd.ExecuteNonQuery();
则可以正确插入数据。 但是,由于删除了将要创建表的部件,因此必须在执行此程序之前创建表。 谢谢你的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.