【问题标题】:Update from DataGridView with SqlDataAdapter使用 SqlDataAdapter 从 DataGridView 更新
【发布时间】:2011-04-11 13:32:37
【问题描述】:

我有一个显示来自 SQL Server 数据库的数据的 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 自动生成视图的命令。

【问题讨论】:

  • 你的表有主键列吗?
  • 基础表确实有一个主键。我想知道 SqlDataAdapter 是否没有捡起它,因为我指向的是视图而不是表。我现在也在想,当我尝试手动编写命令时,我可能弄错了命令,所以我再试一次......

标签: sql-server vb.net triggers sqldataadapter


【解决方案1】:

快速谷歌搜索表明,如果您的表没有主键值,则可能会出现此问题。您的选择查询必须为更新查询返回该值(在没有主键列的情况下,它不会。)

http://social.msdn.microsoft.com/Forums/en-NZ/Vsexpressvcs/thread/5dec5633-ac84-48d9-8fd6-5c7601be4ccd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多