Datatable.acceptchanges() 将数据提交到表中
Datatable.acceptchanges 将数据提交到表...意味着
它将数据插入表..或数据表?
Datatable.acceptchanges commits data to the table...means
will it insert data to the table ..or datatable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
AcceptChanges()的目的是让DataTable知道它的数据已经保存到数据库中。 DataTable 中的所有 DataRow 的 row.RowState 设置为 DataRowState.Unchanged。
它不会将数据保存到数据库中。这是单独完成的。
The purpose of AcceptChanges() is to let the DataTable know that its data has been saved to the database. All DataRows in the DataTable have their row.RowState set to DataRowState.Unchanged.
It does not save the data to the database. That is done separately.
这是文档:
所以您的实际数据库不受影响。
Here's the documentation:
So your actual database is unaffected.
有些人选择操作数据表中的数据,例如删除某些行或将所有名称改为大写。删除
NULL
等。AcceptChanges
只是将这些更改保存到数据表中。如果要提交更改,您需要使用数据适配器或使用其他方法从数据表中的数据行获取数据并提交更改。
Some people choose to manipulate the data in a datatable, examples are deleting certain rows or hanging all names to uppercase. removing
NULL
's and so on.AcceptChanges
just saves these changes to the datatable.If you want to commit the changes you need to use a dataadaptor or use another method to get the data from the datarows in the datatable and commit the changes.
只会影响数据表。不是任何数据库表。
Will only affect the datatable. Not any DB table.
就我而言,这是由数据库中的自动编号字段引起的,我建议如下
调用数据适配器的更新方法
呼叫更新
/// 用于自动编号列
调用datatable的acceptchanges
然后通过oledbadapter重新填表。如果您不需要自动编号字段,请勿将其添加为 oledbadapter 的删除命令中的参数
In my case it was caused by auto-number field in database, I suggest below
call update methof of data adapter
call update
/// for auto number column
call acceptchanges of datatable
Then re-fill table through oledbadapter. If u do not need to autonumber field, do not add that as a parameter in deletecommand of oledbadapter
好的 - 如果我有这个权利,显式调用 DT.CommitChanges() 会将所有行设置为 UNCHANGED。如果这是真的,则在调用 DA.UPDATE(DT) 时,对数据表所做的任何更改都将被忽略。
所以看来,您应该只为那些您不想到达数据库的更改调用 DT.CommitChanges() 。
因此,无论是否调用 CommitChanges,更改都会写入 .NET 数据表,但要获取对数据库表的更改,请不要在执行 DA.Update 之前调用 CommitChanges。当然,这意味着必须调用 DA.Update 才能将更改实际推送到数据库......
Okay - If I have this right, explicitly calling a DT.CommitChanges() will set all rows to UNCHANGED. And if that is true, when calling DA.UPDATE(DT), any changes you made to the datatable will be ignored.
So it seems, you should only call DT.CommitChanges() for those changes that you DO NOT want to reach the database.
Therefore, changes DO make it to the .NET datatable, regardless of the CommitChanges call, but to get changes to the database table, don't call a CommitChanges prior to performing the DA.Update. And of course implying that DA.Update must be called to actually pushed the changes to the database...