在 Visual Basic 中更新表适配器时出错

Posted

技术标签:

【中文标题】在 Visual Basic 中更新表适配器时出错【英文标题】:Error when updating a table adapter in Visual Basic 【发布时间】:2011-10-04 14:53:55 【问题描述】:

我正在尝试通过在 Visual Basic 表单中编码来提高我的编程能力。我已经创建了一个数据库并将其链接到一个 VB 表单,我现在正在编写一种写入数据库而不是读取的方法。

我正在填充一个数组,该数组又被逐行放入数据集中,但是在尝试“更新”表适配器时出现以下错误:

当传递带有修改行的 DataRow 集合时,更新需要有效的 UpdateCommand。

我相信这与主键有关,我的适配器正在更新的表没有主键,因为它涉及与另一个包含主键的表的关系。如何在不出现此错误的情况下更新我的表适配器?谢谢。

【问题讨论】:

【参考方案1】:

您提到的错误消息与您尝试更新的表上的主键无关,而是在抱怨,因为您没有为适配器提供可用于更新基础表的有效命令。

如果您尝试插入或删除新行而不在适配器上指定插入或删除命令,则会遇到同样的错误。

要解决此问题,请将您的 UpdateCommand 属性初始化为有意义的值,例如:

'Open connection
Using Conn as new OleDbConnection("connection string")

  'This is the command that will update your table in the database
  Using UpdateCmd = Conn.CreateCommand()

    UpdateCmd.CommandText = "update yourtable set col1 = ?, col2 = ?"

    'Create a parameter to pass in the value of the "col1" column on "yourtable"
    Dim ColOneParam = UpdateCmd.Parameters.Add("@Col1", OleDbType.Integer)
    ColOneParam.SourceColumn = "Name of column in DataTable which corresponds to col1"

    'Create a parameter to pass in the value of the "col2" column on "yourtable"
    Dim ColTwoParam = UpdateCmd.Parameters.Add("@Col2", OleDbType.Integer)
    ColTwoParam.SourceColumn = "Name of column in DataTable which corresponds to col2"

    'Data adapter which will perform the specified update command for each 
    'newly inserted row
    Using Adapter As New OleDbDataAdapter

      'Set the update command on the adapter, if you omit this line you'll
      'encounter the original error you mentioned
      Adapter.UpdateCommand = UpdateCmd

      'This is the data table containing the rows you wish to update
      Dim NewRows As New DataTable("SomeTable")

      'For each modified row in NewRows, update it in the database
      Adapter.Update(NewRows)

    End Using

  End Using

End Using

上面的代码假定数据库中有一个名为yourtable 的表,其中有两列col1col2,它们是数字。

Using 块只是确保数据库对象被正确释放,这样您就不会最终泄漏资源。

【讨论】:

以上是关于在 Visual Basic 中更新表适配器时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 或 Visual Basic 在 xampp 中更新 MySQL 数据库

如何在不重新安装的情况下更新 Visual Basic 应用程序

在 asp.net(访问数据库)中编写更新查询(visual basic)

使用 Visual Basic SQL 查询的 Excel 在记录更改时删除公式

如何在 Access 2007 中使用 Visual Basic 代码更新单元格

如何在Visual Basic 6.0中使用主键在一个表中使用外键获取记录