使用SqlDataAdapter从DataGridView更新
问题描述:
我有一个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自动生成视图的命令。
答
快速谷歌搜索显示如果您的表没有主键值可能会发生此问题。您的选择查询必须返回更新查询该值(在的情况下,不存在主键列,它wouldnt。)
贵的表有一个主键列? – futile 2011-04-11 15:15:05
底层表具有主键。我想知道,如果SqlDataAdapter没有选择它,因为我指向视图而不是表格。我现在也在想,当我尝试手动写入命令时,我可能会弄错命令,所以我会再去一次... – OMill 2011-04-11 15:46:19