在c#中将CSV文件与数据库进行比较的最快方法

时间:2013-01-11 01:35:00

标签: c# sql compare

我正在编写内部应用程序,其中一个功能是从远程系统导入数据。来自远程系统的数据作为CSV文件提供。我需要将系统中的数据与CSV文件中的数据进行比较。

我需要对我的系统应用任何更改(添加和更改)。我需要跟踪每个被更改的字段。

我的数据库已规范化,因此我正在处理大约10个表以与CSV文件中的数据相对应。实现这个的最佳方法是什么?每个CSV文件包含大约500,000条每日处理的记录。我首先使用查找ID从我的SQL数据库中逐行查询,然后使用c#执行字段比较并根据需要进行更新或插入;然而,这需要太长时间。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  • 将cvs文件加载到数据库中的登台表中;
  • 对其执行验证和清理程序(如有必要)
  • 对您的实时数据进行比较和更新
  • 从登台表中删除所有数据

使用该方法,您可以使用RDBMS功能实现几乎所有清理,验证和更新逻辑。

如果您的RDBMS是SQL Server,您可以利用SQL Server Integration Services。

答案 1 :(得分:2)

如果您有任何作为唯一键的内容,则可以执行以下操作:

  • 创建一个新表包含唯一键和与该键关联的所有字段的哈希的哈希(使用.NET的object.GetHashCode(),因为返回的值确实会随时间变化时间设计。我个人使用谷歌的CityHash,我移植到C#)。
  • 获取新的CSV文件时,请计算每个键的哈希值
  • 检查CSV文件中每行的哈希表。
  • 如果没有唯一键的条目,请创建一个并插入该行。
  • 如果有条目,请查看哈希值是否已更改。
  • 如果有,请更新哈希表中的哈希并更新数据。

答案 2 :(得分:0)

扩展对您问题的第一条评论。

创建一个与csv文件格式匹配的适当索引表,并将数据直接转储到其中。

使用适当的查询存储过程来更新/删除/插入活动表。

摆脱临时表。