我有一個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自動生成視圖的命令。
貴的表有一個主鍵列? – futile 2011-04-11 15:15:05
底層表具有主鍵。我想知道,如果SqlDataAdapter沒有選擇它,因爲我指向視圖而不是表格。我現在也在想,當我嘗試手動寫入命令時,我可能會弄錯命令,所以我會再去一次... – OMill 2011-04-11 15:46:19