【问题标题】:Insert/Update whole DataTable into database table C#将整个 DataTable 插入/更新到数据库表 C#
【发布时间】:2016-08-21 06:29:51
【问题描述】:

我遇到了一个问题,希望能在这里解决。我在 DataSet 中有 3 个不同的表,我想将它插入到数据库表中。

我知道我可以使用SqlBulkCopy 来做到这一点,但有一个问题,那就是我想检查数据库中是否已经存在数据,然后我希望它得到更新而不是插入。

如果数据库表中不存在数据,我想插入它。对此的任何帮助将不胜感激。

我知道我可以遍历每条记录,然后触发一个过程,如果它存在 den 更新或插入,它将检查它的存在。但是数据量很大,遍历每条记录是一个耗时的过程,我不想使用这种方法。

问候

【问题讨论】:

  • 你不能(1)在一次运行中将它批量插入到 SQL Server 的暂存表中,然后 (2)数据库端使用服务器上的 T-SQL 代码从临时表更新您的实际数据表,这是“如果不存在则插入”逻辑?这比在本地迭代大型数据集并仅插入一些行要快得多....
  • 我没有权限在数据库中创建新表。
  • 在 .NET 中运行读取和执行命令可能效率低下,原因有很多。您可以根据记录的存在生成检查和插入/更新等 SQL 语句。但这会导致可能难以操作的 hude 文本文件。您可以使用简单的 c# 应用程序获取 Id,您可以生成适当的 Sql 命令/语句。另一种选择可能是尝试插入所有记录并侦听主键异常以稍后更新它们。

标签: c# sql-server sqlbulkcopy


【解决方案1】:

免责声明:我是项目的所有者Bulk Operations

此项目允许 BulkInsert、BulkUpdate、BulkDelete 和 BulkMerge (Upsert)。

在底层,它几乎完成了@marc_s 所建议的工作(在临时表中使用 SqlBulkCopy 并执行合并语句以根据主键插入或更新)。

var bulk = new BulkOperation(connection);
bulk.BulkMerge(dt);

【讨论】:

  • 哇谢谢它值得一试我猜。 Lemme 检查它,如果它运行良好,然后对其进行投票:) 再次感谢。顺便说一句,它在网站上说它是一个试用版,那么它的限制是什么?
  • 不幸的是,我们有一些免费的产品,但这个只有专业版(所以不是免费的)。每个月都会发布当月的新试用版。
  • 那么试用版软件有哪些限制?
  • 月底试用结束,产品停止工作。您必须购买许可证或下载新的试用版才能继续评估。
  • 试用版具有与完整版相同的功能。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2015-07-30
  • 2015-06-06
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多