C# 使用DataAdapter.Update在dataset中插入/upd行(不基于DBs PK)问题

C# 使用DataAdapter.Update在dataset中插入/upd行(不基于DBs PK)问题,c#,dataset,dataadapter,C#,Dataset,Dataadapter,我有一个批处理过程,它基于一个公共键将多个表中的数据读取到一个数据集中。然后,我在同一个键上构建第二个目标数据查询数据集 此时,我有两个结构相同的数据集(从表/列布局的角度)。然后,我有一个将源中存在的任何行添加到目标数据集的过程。此外,该进程还将尝试基于公共键更新某些列 当使用需要更新的现有行调用DataAdapter.UPDATE命令时,问题似乎就出现了。 错误: System.InvalidOperationException未处理 Message=“SELECT语句中指定的表不包含唯一键

我有一个批处理过程,它基于一个公共键将多个表中的数据读取到一个数据集中。然后,我在同一个键上构建第二个目标数据查询数据集

此时,我有两个结构相同的数据集(从表/列布局的角度)。然后,我有一个将源中存在的任何行添加到目标数据集的过程。此外,该进程还将尝试基于公共键更新某些列

当使用需要更新的现有行调用DataAdapter.UPDATE命令时,问题似乎就出现了。 错误: System.InvalidOperationException未处理 Message=“SELECT语句中指定的表不包含唯一键或标识符列,或者SELECT语句不包含所有键列。”

由于我无法控制目标数据库上的PK,有没有办法告诉适配器此特定更新的密钥是什么?我已经为数据集中的每个数据表设置了“自定义”主键

这是一个非用户界面的批处理过程,其性能要求非常低。(解释数据集的使用等)


有什么想法吗?

您必须像以前一样为数据集中的每个表设置PK。 我不认为适配器有办法自己弄清楚PK是什么。
如果有,而且有人知道,我洗耳恭听。

您必须像以前一样为数据集中的每个表设置PK。 我不认为适配器有办法自己弄清楚PK是什么。
如果有,而且有人知道,我洗耳恭听。

分析数据库,看看有什么查询被触发。从探查器复制查询并尝试手动执行它们。如果它们失败了,那么问题就出在sql上,错误来自数据库,并简单地传递给应用程序


这至少应该告诉你问题是否是由于数据库中缺少真正的PK造成的。

对数据库进行分析,并查看触发了哪些查询。从探查器复制查询并尝试手动执行它们。如果它们失败了,那么问题就出在sql上,错误来自数据库,并简单地传递给应用程序


这至少可以告诉你问题是否是由数据库中缺少真实PK引起的。

我已经设置了PK并继续得到错误(在帮助文档中指向没有可行PK的实际数据库)我已经设置了PK并继续得到错误(在帮助文档中指向没有可行PK的实际数据库)