为什么将两行添加到我的 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()
的调用,没有必要。
当我使用以下代码将数据添加到我的 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()
的调用,没有必要。