【发布时间】:2015-02-07 23:35:53
【问题描述】:
我有一个包含记录的 .Net DataTable,所有这些都是“添加”的记录。数据库中对应的表可能包含数百万行。如果我尝试简单地调用 SqlDataAdapter 上的“更新”方法,任何现有记录都会由于违反主键约束而引发异常。我考虑将所有物理表的记录加载到第二个 DataTable 实例中,合并两者,然后在第二个 DataTable 上调用 Update 方法。这实际上就像我想要的那样工作。但是,我担心的是,如果物理表中有 300 亿条记录,那么将所有这些数据加载到内存中的 DataTable 中可能会成为问题。
我考虑过从物理表中选择一个数据子集并按照上述方法进行操作,但事实证明子查询的构建非常复杂且繁琐。你看,我没有使用一个已知的表。我正在使用包含数百个数据表的数据集。每个 DataTables 都映射到它自己的物理表。表的名称和模式在编译时是未知的。这一切都必须在运行时完成。
我使用过 SqlBulkCopy 类,但遇到同样的问题 - 重复记录引发异常。
我不想在运行时为每个表动态构造查询。如果这是唯一的方法,那就这样吧,但我不禁认为必须有一个使用 Ado.Net 提供的更简单的解决方案。
【问题讨论】:
标签: c# datatable ado.net dataset sqldataadapter