繁体   English   中英

在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个数据,我认为问题是因为每次单击按钮后我都会创建一个新表,所以我将代码更改为:

        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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM