将 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 会发生什么取决于该 DataRowRowState。如果RowStateUnchanged,则忽略该行。如果RowStateAddedModifiedDeleted,则将分别插入、更新或删除行。如果您只是向DataTable 添加一行,那么它的RowState 将是Added,因此无论您喜欢与否,都会插入该行。通常调用Fill检索数据,所有行都是Unchanged,然后编辑一行,它变成Modified 如果您不想检索和编辑数据,您可以添加一行,然后调用其SetModified 方法将RowState 显式设置为Modified。您只需确保未使用乐观并发,因为您没有该行的原始数据,因此您将无法匹配数据库中当前的数据。 【参考方案1】:

这是由于“添加”了行状态,修复它的唯一方法是将单个行状态更改为适当的状态。

我没有看到其他解决此问题的方法,因此我将关闭它,因为没有更好的答案。

【讨论】:

以上是关于将 DataTable 保存到 MS Access 表的主要内容,如果未能解决你的问题,请参考以下文章

将 accde 文件从 MS Access 2013 保存到 MS Access 2010

将数据从 MS Access 表单保存到同一个 MS Access 数据库中的另一个表?

VBA Excel - 从 MS Access 将列名保存到电子表格

C# DataTable 更新 Access 数据库

C#中如何将DataTable保存到数据库?

将 XML 审计数据存储到文件系统或 MS Access 表?