将 DataTable 保存到 MS Access 表
Posted
技术标签:
【中文标题】将 DataTable 保存到 MS Access 表【英文标题】:Saving DataTable to MS Access Table 【发布时间】:2018-07-09 22:27:37 【问题描述】:背景资料:
我有一个 DataGridView,我可以从 MS Access 中加载一个表和/或添加数据。它不是数据绑定的(我不想要)。 我之前所做的是在保存新数据之前从 MS Access 表中删除数据。但我想以正确的方式进行(+ 丢失数据的可能性会更小)。
问题: 当我这样做时
Adapter.Update(DataTable) 'OleDb.OleDbDataAdapter
数据只是在最后添加(插入),就像向 datagridview 添加行时一样。
我想要做的是覆盖 MS Access 表中的数据,使其看起来与新保存的数据相同(可以更新的行得到更新,添加的新行,删除的行删除)
换句话说,如果我要保存 6 行,我希望在数据库中看到 6 行,而不是更多。
我也尝试加载数据,然后更改它,然后将其保存回来,但结果是一样的。例如,如果我加载 5 行并保存 5 行,那么保存后我最终会得到 10 行。
Adapter = New OleDb.OleDbDataAdapter("SELECT * FROM " & DB_TableName, DB_Connection)
Dim TempDataTable As New DataTable
BotDB_Adapter.Fill(TempDataTable )
'edit data here
Adapter.Update(TempDataTable)
TLDR:如何中,以便它覆盖其中已有的数据。
【问题讨论】:
您几乎可以肯定应该做的是在数据适配器上调用Fill
来填充DataTable
,将DataTable
绑定到您的DataGridView
,编辑数据,然后调用@987654327 @ 在同一数据适配器上将更改从 DataTable
保存回数据库。如果你不这样做,为什么不呢?
我正在填写,但我不希望它像我在原始问题中所写的那样绑定。
问题是你为什么不想绑定它。可能有正当的理由,但在绝大多数情况下,当我看到人们说他们不想使用数据绑定时,这是出于不好的原因。我没有帮助人们做错事的习惯。如果我了解您的动机,那么我可以确保我提供的建议实际上是有帮助的,而不是有害的。
也就是说,当您在数据适配器上调用 Update
时,DataRow
会发生什么取决于该 DataRow
的 RowState
。如果RowState
是Unchanged
,则忽略该行。如果RowState
是Added
、Modified
或Deleted
,则将分别插入、更新或删除行。如果您只是向DataTable
添加一行,那么它的RowState
将是Added
,因此无论您喜欢与否,都会插入该行。通常调用Fill
检索数据,所有行都是Unchanged
,然后编辑一行,它变成Modified
。
如果您不想检索和编辑数据,您可以添加一行,然后调用其SetModified
方法将RowState
显式设置为Modified
。您只需确保未使用乐观并发,因为您没有该行的原始数据,因此您将无法匹配数据库中当前的数据。
【参考方案1】:
这是由于“添加”了行状态,修复它的唯一方法是将单个行状态更改为适当的状态。
我没有看到其他解决此问题的方法,因此我将关闭它,因为没有更好的答案。
【讨论】:
以上是关于将 DataTable 保存到 MS Access 表的主要内容,如果未能解决你的问题,请参考以下文章
将 accde 文件从 MS Access 2013 保存到 MS Access 2010
将数据从 MS Access 表单保存到同一个 MS Access 数据库中的另一个表?