2009-12-23 81 views
1

我有一种情况,通过我有一个目录服务器A和一个相同的命名目录服务器B.我在服务器B上使用同义词,以便一些表实际上只是通过服务器A.使用sql server 2005同义词表导致动态查询生成错误

这样,从ServerB.Table调用select *,实际上是透明地从ServerA.Table返回数据。这似乎工作正常,当我做选择时,也工作正常,如果我手tsql脚本插入,但是,当我使用ADO.NET适配器它给了我一个错误说:“动态SQL生成不支持一个SelectCommand不会返回任何基表信息。“这通常意味着在返回数据时没有可用的主键信息。有没有办法解决? (与我最好能够继续使用同义词,因为它不是一个真正的选择排除它的使用)。

我知道有一个始终是主键的“ID”列,如有必要,我可以根据需要将主键信息硬编码回ado.net适配器/数据表。

谢谢!

回答

1

您正在使用SQLCommandBuilder获取用于数据修改操作的SQL

由于远程表不返回元数据,所以命令生成器无法生成相应的SQL用于更新或从表中删除,因为它不知道将哪个字段用作PK

您应该为您的数据适配器提供您自己的UpdateCommandDeleteCommand

查看this link代码。

+0

是的,不幸的是我希望有一种方法可以做到这一点,而无需手工制作所有更新命令:/或者最糟糕的是,只需在桌面上设置主键。 – mrwayne 2010-01-05 00:17:19