【问题标题】:Updating SQL Table with the changes made to an in-memory datatable使用对内存数据表所做的更改更新 SQL 表
【发布时间】:2015-04-05 08:41:19
【问题描述】:

我在 SQL 数据库(在本地网络上)中有一个包含 5,000 多行的表。这些数据被加载到我正在为最终用户开发的客户端应用程序中的内存数据表中,以查看、搜索和操作记录。

我的问题是一旦用户完成操作数据,将其写回 SQL 表的最佳方法是什么?我可以清除 SQL 表并发送整个内存数据表到 SQL 服务器,但考虑到大量记录,这似乎是一个狡猾且效率低下的过程。

有没有人想到的解决方案?例如,以某种方式跟踪用户更改的记录并仅通过 SQL 查询更新这些记录?

处理此问题的最佳方法是什么?如有必要,我很乐意重新考虑我的方法。

【问题讨论】:

  • SqlDataAdapter.Update 和关于 跟踪更改 不会重新发明轮子。 DataRow.RowState
  • 您好史蒂夫,感谢您的指导。这是我第一次做这样的事情,但这听起来正是我需要的。再次感谢
  • 如果有很多记录,DataAdapter 可能会很慢。如果遇到瓶颈,请考虑将整个 DataTable 保存到临时表(例如 Select * Into #MyTemp From YourTableName),使用 SqlBulkCopy 将数据保存到其中,然后使用 MERGE 语句让数据库应用您的更改,
  • 谢谢 Ciarán。我可能会发现自己遇到了这个问题,所以我会记住这个解决方案。再次感谢

标签: sql sql-server vb.net visual-studio-2013 datatable


【解决方案1】:

当您配置数据集时,您可以定义适合您需要的更新语句。

您正在操作的数据表将跟踪其自身的更改,您可以使用GetChanges 方法获取它们。当您调用适配器的Update 函数时,您只能发送数据表的更改。

https://msdn.microsoft.com/en-us/library/k2552649%28v=vs.110%29.aspx

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.update%28v=vs.110%29.aspx

【讨论】:

    【解决方案2】:

    SqlDataAdapter.Update 和关于跟踪更改不要重新发明轮子。 DataRow.RowState - 史蒂夫

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多