我有一个批处理过程,它根据公共密钥将多个表中的数据读入数据集。然后,我构建了在同一个密钥上查询的目标数据的第二个数据集。
此时我有两个结构相同的数据集(从表/列布局的角度来看)。然后我有一个进程将源中存在的任何行添加到目标数据集。此外,该过程还将尝试基于公共密钥更新某些列。
当使用需要更新的现有行调用DataAdapter.UPDATE命令时,问题似乎就出现了。 错误: System.InvalidOperationException未处理 Message =“SELECT语句中指定的表不包含唯一键或标识符列,或者SELECT语句不包含所有键列。”
由于我无法控制目标数据库上的PK,有没有办法告诉适配器这个特定更新的关键是什么?我有“自定义”为数据集中的每个DataTable设置主键。
这是一个非用户界面批处理过程,其性能要求非常低。 (解释数据集的使用等)
有什么想法吗?
答案 0 :(得分:1)
配置数据库并查看正在触发的查询。从Profiler复制查询并尝试手动执行它们。如果它们失败了,那么问题在于sql,错误来自数据库,只是传递给你的应用程序。
这至少应该告诉你问题是否是由数据库中缺少真正的PK引起的。
答案 1 :(得分:0)
您必须像操作一样为数据集中的每个表设置PK。 我不认为适配器有办法弄清楚PK本身是什么。 如果有,有人知道,我全都耳朵。