求教DataSet的AcceptChanges方法的用法!(30分)

  • 主题发起人 主题发起人 草在墙头
  • 开始时间 开始时间

草在墙头

Unregistered / Unconfirmed
GUEST, unregistred user!
看其帮助和在网上看得一些例子,都是直接调用方法并提交数据,但我用怎么就是不行?
高手指点!
 
我用AcceptChanges方法,感觉一点用都没有,我看了有些网站和sqlDataAdapter.Update()联合使用,我觉得多此一举,sqlDataAdapter.Update()就已经可以将数据库保存搞定了。不过既然DataSet封装了这个方法,那么这个方法就应该一定有用啊,微软可能封装没用的东东在.net中吗,我看不可能。AcceptChanges到底是干嘛用的?
大侠请指教!
 
AcceptChanges 表示DataSet接受以前所做过的修改,不代表把数据更新到数据库中。
也就是说,把RowState改为未变化(原来的状态可能是增加、修改或删除)。
 
DataSet的AcceptChanges方法只是应用改变内存数据集DataSet中的数据
而更新数据库,要通过内存数据集的状态(如deleted)标志来判断的,
如果你在通过数据适配器更新物理数据库前使用AcceptChanges方法
应用更改了数据集状态,就无法更新物理数据库
 
那么DataSet的AcceptChanges方法只是用于更改Dataset的数据集并改变数据集的状态吗?如果只是这样,我实在想不起它究竟由什么作用。
 
主要用于无连接数据库操作,现在本地做增删改,最后一次性更新到数据库(用SqlDataAdapter),更新成功让DataSet接受改变。主要就起这个作用。
 
我想大家都理解错了,这个方法的作用和PB的数据窗口中的Accept作用相似
都是把正在编辑的数据保存到数据集的字段中,
举个例子来说吧:
譬如:
窗体上有个DBEdit的控件,
还有个ToolButton(为什么要用ToolButton呢,这样不会使其它的控件失去焦点
失去焦点就会引起类似于AcceptChanges的作用)
当你编辑DBEdit的内容时,从ToolButton的事件中读取此DBEdit对应的字段的值,
然后显示到一个Label中,此时你会发现两处的值是不同的,而AcceptChanges
就是要让它们相同,让最新的修改能够进入数据集,
这样提交的时候才会不至于漏掉数据,PB中的这个方法,是经常用的
 
谁用Update或者什么方法更新一条通过rows.add增加的数据成功的,给段代码吧!!!
 
我的问题已经搞定,你说详细些,或许我能帮忙
 
这个方法与Delphi中的ClientDataSet的MergeLog差不多,如果你不导出XML是不能看出问题的.数据集的变化是需要纪录的,比如你增加了一条、修改了一条纪录等,真的向中间层提交数据的时候提交的是这些变化的数据,如果执行了这个方法,那么DataSet中的数据又成为没有更改的数据了。
 
这样:
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
OracleConnection cnn = new OracleConnection();
OracleDataAdapter da = new OracleDataAdapter();
OracleCommandBuilder ocb = new OracleCommandBuilder(da);
da.SelectCommand = new OracleCommand("SQL",cnn);
cnn.Open();
da.Fill(ds,"TableName");
dt = ds.Tables["TableName"];
dr = dt.NewRow();
dr[""] = "";
dt.Rows.Add(dr);
da.Update(ds,"TableName");
 
DataSet.AcceptChanges();使的DataSet的属性变为为编辑过。
所以,在SqlDataAdapter.Update(dt.Tables[""])时,实际对数据库中的数据并未做任何修改,如何去修改,我试了一种方法,就是,用上述方法,在内存中进行修改,提交时用
SqlCommand提交,不过这样一来,DataSet.AcceptChanges()的作用又显得不重要了。
 
DataSet.AcceptChages() 本来就不是给你用来修改数据库的,
只是内存中更改而已。
要修改数据库就用 *DataAdapter.Update();
 
后退
顶部