在 C# 中使用 button_click 向 SQLite 插入数据
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 个数据,我认为问题是因为我每次点击按钮后都会创建一个新的 table ,所以我将代码更改为:
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,但这两者都需要您为每个要传递的命令创建单独的 SQL命令。
改为尝试以下操作:
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();
可以正确插入数据。但是,因为我删除了将创建 table 的部分,所以必须在执行此程序之前创建 table。感谢您的帮助!
我想用我的 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 个数据,我认为问题是因为我每次点击按钮后都会创建一个新的 table ,所以我将代码更改为:
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,但这两者都需要您为每个要传递的命令创建单独的 SQL命令。
改为尝试以下操作:
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();
可以正确插入数据。但是,因为我删除了将创建 table 的部分,所以必须在执行此程序之前创建 table。感谢您的帮助!