C#数据库更新问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:39:35
我用的是DataAdapter来更新数据库,问题是数据改变后,并没有更新到数据库中去,请问主要是什么原因?如何解决?

private void button1_Click(object sender, EventArgs e)
{

SqlConnection sqlcon=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\web\apc1\App_Data\APCdatabase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
DataSet ds=new DataSet();
sqlcon.Open();
SqlDataAdapter sqld=new SqlDataAdapter("select * from tbl_paper",sqlcon);
sqld.Fill(ds,"tbl_paper");
SqlCommandBuilder sqlcmdb=new SqlCommandBuilder(sqld);
ds.Tables["tbl_paper"].Rows[0][2]="good";
ds.Tables["tbl_paper"].AcceptChanges();
sqld.Update(ds,"tbl_paper");
sqld.Close();
}

去掉以下这行代码即可:
ds.Tables["tbl_paper"].AcceptChanges();

原因如下:
当修改数据集中的数据时,会在被修改的记录上增加一个标志,表示当前数据集中某一条记录的状态(如:已修改、已删除、已添加等),调用 Update 方法时 DataAdapter 就是根据这些标志更新数据库。如果调用了 AcceptChanges 方法这些标志将被重置为“未修改”状态,所以 DataAdapter 认为没有任何数据被修改,因此没有发生更新数据库的情形。

1.检查button1_Click是否回传数据,有的静态刷新技术数据存在不回传的情况。
2.sqld 能够既用来读数据,又用来更新数据我不知道,但是很多读的数据只是读入了内存,仔细查查Update函数,是操作数据库内的表么?我是读用一个按钮,提交再用一个。如果你一定要读这些数据,可以写到load函数里。

没可能的,你没有对数据库执行修改命令是不可能更新数据的。因为Grideview里面的表是虚拟的

二楼的好像说的有理,但MSDN中有如下说法:
DataTable.AcceptChanges方法
提交自上次调用 AcceptChanges 以来对该表进行的所有更改。调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState 也会随之更改:所有状态为 Added 和 Modified 的行的状态都变为 Unchanged;状态为 Deleted 的行则被移除。
在您尝试使用 DbDataAdapter.Update 方法更新 DataSet 之后,通常会对 DataTable 调用 AcceptChanges 方法。

DataTable.RejectChanges方法
回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。
调用 RejectChanges 时,任何仍处于编辑模式的 DataRow 对象将取消其编辑。新行被移除。DataRowState 设置为 Modified 或 Deleted 的