数据网格视图未更新到数据库
本文关键字:更新 数据库 视图 数据网 网格 数据 | 更新日期: 2023-09-27 18:33:30
我正在使用带有datagridview的winforms应用程序。问题:尝试将编辑后的数据保存在数据库中法典:
private void FillData(string selectCommand)
{
SQLiteConnection conn = new SQLiteConnection(connString);
dataGridView1.AutoGenerateColumns = true;
string selectCommand = "select * from Table1";
da = new SQLiteDataAdapter(selectCommand, connString);
conn.Open();
ds = new DataSet();
SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(da);
da.Fill(ds,"Design1");
dataGridView1.DataSource = ds.Tables[0] ;
dataGridView1.DataMember = "Design1";
}
private void btnSave_Click(object sender, EventArgs e)
{
SQLiteConnection conn = new SQLiteConnection(connString);
try
{
dataGridView1.EndEdit();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ds.Tables[0].Rows[i].AcceptChanges();
}
da.Update(ds.Tables[0]);
}
catch (Exception ex)
{
throw ex;
}
}
不确定这是否是 Sqlite 的问题。没有错误,只是它不会在数据库中更新。一旦我停止应用程序并重新加载它,编辑就会保存在数据库中。
谢谢太阳
我认为您应该颠倒"接受更改"和"更新"行的顺序
dataGridView1.EndEdit();
da.Update(ds.Tables[0]);
// Just accept on the table, no need to do row by row
ds.Tables[0].AcceptChanges();
请参阅此处的备注以供参考
我还要说,保留所有这些变量不是一个好的做法。
它们可能会引入难以跟踪的副作用和错误。
在特殊模式下,应尽快处理连接,封装在using
语句中。(前提是您明确请求连接池功能 -> "Pooling=True;Max Pool Size=100;"
)
例如:
private void SaveData(DataGridView dgv, string selectCommand)
{
using(SQLiteConnection conn = new SQLiteConnection(connString))
{
conn.Open();
SQLiteDataAdapter da = new SQLiteDataAdapter(selectCommand, connString);
SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(da);
DataTable dt = dgv.DataSource as DataTable;
da.Update(dt);
dt.AcceptChanges();
}
}