2011-04-11 48 views
0

我有一個DataGridView顯示來自SQL Server數據庫的數據。它允許用戶編輯數據並將其保存回數據庫。使用SqlDataAdapter從DataGridView更新

數據被保存到數據庫中的方法是這樣的:

Dim da As New SqlDataAdapter 
Dim cmdBuilder As New SqlCommandBuilder(da) 

da.SelectCommand = New SqlCommand(sql, conn) 

da.InsertCommand = cmdBuilder.GetInsertCommand 

da.UpdateCommand = cmdBuilder.GetUpdateCommand 

Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da) 
da.Update(dt) 

這當我保存到普通表工作正常。不過,我也想保存到一個具有插入,更新和刪除觸發INSTEAD OF觸發器的視圖。當我嘗試使用以上視圖時,出現以下錯誤:

對於不返回任何鍵列信息的SelectCommand,不支持UpdateCommand的動態SQL生成。

如何保存到此視圖?我不想直接保存到底層表,因爲我想觸發觸發器。

謝謝!

編輯:我也嘗試手動生成InsertCommand和UpdateCommand,但得到了同樣的錯誤。

編輯2:事實證明,當我手動生成它們時,我得到了錯誤的命令。一旦我確定它工作正常 - 我的視圖得到更新,觸發器按預期觸發。我猜你不能使用SqlCommandBuilder自動生成視圖的命令。

+0

貴的表有一個主鍵列? – futile 2011-04-11 15:15:05

+0

底層表具有主鍵。我想知道,如果SqlDataAdapter沒有選擇它,因爲我指向視圖而不是表格。我現在也在想,當我嘗試手動寫入命令時,我可能會弄錯命令,所以我會再去一次... – OMill 2011-04-11 15:46:19

回答