2008-11-10 58 views
1

我有一個批處理過程,它可以根據公共密鑰從多個表中讀取數據到數據集中。然後,我建立第二個數據集的目的地數據查詢在同一把鑰匙上。使用DataAdapter.Update在數據集中插入/更新行(不基於DBs PK)問題

在這一點上,我有兩個結構相同的數據集(從表格/列布局的角度來看)。然後我有一個進程將源中存在的任何行添加到目標數據集。此外,該流程還將嘗試基於公用密鑰更新某些列。

當使用需要更新的現有行調用DataAdapter.UPDATE命令時,問題似乎就出現了。 錯誤: System.InvalidOperationException未處理 Message =「SELECT語句中指定的表不包含唯一鍵或標識符列,或者SELECT語句不包含所有鍵列」。

由於我沒有辦法控制目標數據庫上的PK,有沒有辦法告訴Adapter這個特定更新的關鍵是什麼?我有「自定義」設置數據集中每個DataTable的主鍵。

這是一個非用戶接口批處理過程,其性能要求非常低。 (解釋數據集的使用等)

任何想法?

回答

0

您必須像設置數據集中的每個表一樣設置PK。 我不認爲有一種方法讓適配器弄清楚PK本身是什麼。 如果有的話,有人知道我是所有的耳朵。

+0

我已經設置了PK並繼續得到錯誤(在幫助文檔中指出實際的DB沒有可行的PK) – WIDBA 2008-11-10 17:19:18

1

剖析數據庫並查看正在觸發的查詢。從Profiler複製查詢並嘗試手動執行它們。如果它們失敗了,那麼問題出在SQL上,錯誤來自數據庫,並且簡單地傳遞給你的應用程序。

這應該至少告訴你,如果問題是由於在數據庫中缺乏真正的PK引起的。