2009-12-23 41 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