Когда я добавляю данные в свою таблицу базы данных 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();
Почему это происходит ?
Кроме того, код для обновления данных
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()
datatable, он вызывает SelectCommand, но в вашем случае это оператор INSERT.
На самом деле, вам не следует ничего делать с адаптером, вы должны просто выполнить ExecuteNonQuery, а затем вызвать refreshdata
.
А можно убрать призыв к Update()
в refreshdata()
, это не обязательно.
@Jayanta_KMC подождите, я уточню
@Jayanta_KMC это имеет больше смысла?
Ага, спасибо за это
Я пробовал это, но результат все тот же