如何实现数据集中的数据向数据源(数据库)更新,update方法不能实现???(100分)

  • 主题发起人 主题发起人 trustzgb
  • 开始时间 开始时间
T

trustzgb

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚刚看c#,按照资料介绍
调用适配器(dataadapter)的update方法,可以实现向数据源更新数据,但是以下代码:
//sqlconnection已经创建
SqlDataAdapter ada=new SqlDataAdapter("select number,name from info",mysqlConnection);
//创建适配器
SqlCommandBuilder mybuild=new SqlCommandBuilder(ada);
mysqlConnection.Open();
DataSet myset=new DataSet();//定义数据集
ada.Fill(myset,"info");
myset.Tables["info"].Rows[0]["name"]="11111111111";
myset.AcceptChanges();
ada.Update(myset,"info");
mysqlConnection.Close();
执行后没有任何错误,但是第数据集中第0行的name字段对应的值在数据库中没有修改
[?][?][?][?][?][?][?]
不知是何原因,请帮忙解答
 
退出后呢?
 
SqlDataAdapter ada=new SqlDataAdapter("select number,name from info",mysqlConnection);
//创建适配器
SqlCommandBuilder mybuild=new SqlCommandBuilder(ada);
//试试这样
mybuilder.GetUpdateCommand();
DataSet myset=new DataSet();//定义数据集
ada.Fill(myset,"info");
myset.Tables["info"].Rows[0]["name"]="11111111111";
DataSet myChanges = myset.GetChanges();
ada.Update(myChanges);
 
to:xiaer_wang
如你所说,还是没有更新数据源(库)中的信息
 
在链接打开之前,我加了这么一句话
messagebox.show(ada.updatecommand.commandtext);
但是出现对象没有创建,不能引用的错误(应该是指updatecommand对象没有创建)
创建之后,用ada.updatecommand=mybiuld.getupdatecommand()方法
在查看updatecommand.commandtext值,为空字符串,为什么????
 
把你源代码中的myset.acceptchanges()句去掉试试
 
to: xiaer_wang
刚才忘记把acceptchanges方法语句去掉了
现在成了
不过,不知道为什么去掉acceptchanges(),就可以了
而更新前执行myset.acceptchanges()方法就不能更新到数据库中了,很疑惑,不明白
有人知道为什么吗?
 
acceptchanges()使你的数据集的更改(Modfiyed)属性不见了.所以不会被更新.
 
将acceptchanges()放到SqlDataAdapter.update()的后面,update()中的参数必须是在编辑状态下,因为你先进行了accept(),其实此时dataset并没有把数据传回数据库中,所以提交后的表是rollback状态下的表。值不变。建议你在对DataSet更改提交中使用:
DataSet ChangedSet = new DataSet();
ChangedSet = DataSet1.GetChanges();
SqlDataAdapter1.update(Changedset);
 
多人接受答案了。
 
后退
顶部