DataSet dataSet1=new DataSet();
SqlDataAdapter sda;
SqlCommandBuilder scb;
...
dataGridView1.DataSource = dataSet1.Tables[0];
scb = new SqlCommandBuilder(sda);
sda.Update(dataSet1);用这种方法增加和更改数据都没有问题。。但是用来删除数据总是删除不掉,DataGridView上面显示删除了。。但是数据库里面并没有删除。
if (dataGridView1.Rows.Count > 0)
{
dataSet1.Tables[0].Rows.RemoveAt(currentIndex);
//dataSet1.Tables[0].Rows[currentIndex].Delete();
//dataSet1.Tables[0].AcceptChanges(); scb = new SqlCommandBuilder(sda);
sda.Update(dataSet1); dataGridView1.DataSource = dataSet1.Tables[0];
}
SqlDataAdapter sda;
SqlCommandBuilder scb;
...
dataGridView1.DataSource = dataSet1.Tables[0];
scb = new SqlCommandBuilder(sda);
sda.Update(dataSet1);用这种方法增加和更改数据都没有问题。。但是用来删除数据总是删除不掉,DataGridView上面显示删除了。。但是数据库里面并没有删除。
if (dataGridView1.Rows.Count > 0)
{
dataSet1.Tables[0].Rows.RemoveAt(currentIndex);
//dataSet1.Tables[0].Rows[currentIndex].Delete();
//dataSet1.Tables[0].AcceptChanges(); scb = new SqlCommandBuilder(sda);
sda.Update(dataSet1); dataGridView1.DataSource = dataSet1.Tables[0];
}
正是由于DataSet才使得程序员在编程时可以屏蔽数据库之间的差异,从而获得一致的编程模型。DataSet支持多表、表间关系、数据约束等,和关系数据库的模型基本一致。
DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息,请参见 在 ADO.NET 中使用 DataSet。这是比较专业的说法~~
SCb 会自动生成 updateCommand,deleteCommand 命令,
当执行sda.Update()时自动连接数据源,更新数据
所以你能够更新数据库 this.Validate();
ds.Update(ds.Tables[0]);
但我估计的是你更新后没提交状态导致
更新后提交状态
ds.AcceptChanges();
//dataSet1.Tables[0].AcceptChanges(); //这一句会提交所有更改,Update时将检测不到任何修改,因此应将它移到Update()之后,详情参看MSDN
scb = new SqlCommandBuilder(sda);
sda.Update(dataSet1);
dataSet1.Tables[0].AcceptChanges();
dataGridView1.DataSource = dataSet1.Tables[0];
因此当Update()时,同样的也检测不到该DataTable的任何修改。楼主有空的话应该看看MSDN里面关于DataAdapter.Update()的工作机制,以及DataTable.AcceptChanges()、DataSet.AcceptChanges()方法的作用。里面都有详细的说明 。