为什么将两行添加到我的 SQLite 数据库 table?

Why two rows getting added to my SQLite database table?

当我使用以下代码将数据添加到我的 SQLite 数据库 table 时,由于某种原因它向 table 添加了 2 个相同的行而不是一个。

    using(SQLiteConnection conn= new SQLiteConnection(@"Data Source="+Path.GetFullPath("./TestDB.db")+";"))
    {
        conn.Open();

        SQLiteCommand command = new SQLiteCommand("INSERT INTO Test(FirstName, LastName, Age) VALUES('Chris','Pine',42)", conn);
        command.ExecuteNonQuery();
        
        SQLiteDataAdapter adap = new SQLiteDataAdapter(command);
        
        DataTable dt = new DataTable("Test");
        adap.Fill(dt);
        
        dataGrid1.ItemsSource=dt.DefaultView;
        adap.Update(dt);
        
        conn.Close();

    }
    
    MessageBox.Show("Complete!");
    refreshdata();

为什么会这样?

还有refreshdata的代码

public void refreshdata()
{
    
    using(SQLiteConnection conn= new SQLiteConnection(@"Data Source="+Path.GetFullPath("./TestDB.db")+";"))
        
    {
        conn.Open();

        SQLiteCommand command = new SQLiteCommand("Select * from Test", conn);
        command.ExecuteNonQuery();
        
        SQLiteDataAdapter adap = new SQLiteDataAdapter(command);
        
        DataTable dt = new DataTable("Test");
        adap.Fill(dt);
        
        dataGrid1.ItemsSource=dt.DefaultView;
        adap.Update(dt);
        
        conn.Close();

    }

您正在调用 ExecuteNonQuery 并向适配器提供一个 INSERT 命令来代替它的 SelectCommand

SQLiteDataAdapter adap = new SQLiteDataAdapter(command);

该行代码使用了一个设置适配器的 SelectCommand 的构造函数。当您 Fill() 数据表时,它会调用 SelectCommand,但在您的情况下它是一个 INSERT 语句。

真的,你不应该在那里对适配器做任何事情,你应该只执行 ExecuteNonQuery 然后调用 refreshdata.

并且可以去掉refreshdata()中对Update()的调用,没有必要。