在 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。感谢您的帮助!