當我使用下面的代碼將資料添加到我的 SQLite 資料庫表時,它會出于某種原因向表中添加 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();
}
uj5u.com熱心網友回復:
您正在呼叫 ExecuteNonQuery 并且您正在給配接器一個 INSERT 命令來代替它的SelectCommand.
SQLiteDataAdapter adap = new SQLiteDataAdapter(command);
該行代碼使用設定配接器的 SelectCommand 的建構式。當您Fill()使用資料表時,它會呼叫 SelectCommand,但在您的情況下,它是一個 INSERT 陳述句。
真的,你不應該在那里對配接器做任何事情,你應該只執行 ExecuteNonQuery 然后呼叫refreshdata.
Update()您可以洗掉對in的呼叫refreshdata(),這不是必需的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446887.html
