【问题标题】:Updating records requires a valid InsertCommand when passed DataRow collection with new rows使用新行传递 DataRow 集合时,更新记录需要有效的 InsertCommand
【发布时间】:2016-01-13 04:23:38
【问题描述】:

我正在尝试将表单中的数据重新添加到 Access 表中,但我不断收到以下错误消息:

在传递 DataRow 集合时,更新需要有效的 InsertCommand 有新的行。

对于我的一生,我无法弄清楚我需要做什么。

这是应该更新记录的按钮单击的代码。

Public Class Orders

    Dim ClientOrderConnection As New OleDb.OleDbConnection

    Dim Provider As String
    Dim dbSource As String
    Dim sqlQuery As String

    Dim dsClientOrder As New DataSet
    Dim daClientOrder As New OleDb.OleDbDataAdapter
    Dim dtOrders As New Data.DataTable
    Dim Booking As New ArrayList



    Dim RowNumber As Integer
    Dim Counter As Integer = 0
    Dim NumberOfRows As Integer

    Private Sub Orders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



        Provider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
        dbSource = "Data Source = A2ComputingDatabase.accdb"

        ClientOrderConnection.ConnectionString = Provider & dbSource

        ClientOrderConnection.Open()

        sqlQuery = "SELECT * FROM TblClientOrder"

        daClientOrder = New OleDb.OleDbDataAdapter(sqlQuery, ClientOrderConnection)

        daClientOrder.Fill(dsClientOrder, "ClientOrder")

        ClientOrderConnection.Close()

        NumberOfRows = dsClientOrder.Tables("ClientOrder").Rows.Count


    Private Sub btnSubmit_Click(sender As System.Object, e As System.EventArgs) Handles btnSubmit.Click



        If RowNumber <> -1 Then

            Dim cbClientOrder As New OleDb.OleDbCommandBuilder
            Dim dsClientNewRow As DataRow




            dsClientNewRow = dsClientOrder.Tables("ClientOrder").NewRow()

            dsClientNewRow.Item("ClientOrderNumber") = txtOrderNo.Text
            dsClientNewRow.Item("ClientTelNo") = txtClientTelNo.Text

            dsClientOrder.Tables("ClientOrder").Rows.Add(dsClientNewRow)

            daClientOrder.Update(dsClientOrder, "ClientOrder")


            MsgBox("New Reocrd added to the Database")
        End If



    End Sub

非常感谢任何帮助。

【问题讨论】:

    标签: vb.net ms-access


    【解决方案1】:

    您实际上必须从 DataAdapter 实例化 OledbCommandBuilder:

    cbClientOrder = New OleDb.OleDbCommandBuilder(daClientOrder)
    

    用你的 DataAdapter 调暗 cbClientOrder 然后把它放在 daClientOrder.Fill() 调用之后的某个地方,你应该很高兴。当然,在你的 btnSubmit_Click 事件中去掉 cbClientOrder 的其他声明。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2010-12-23
      • 2010-10-09
      • 1970-01-01
      • 2013-09-05
      • 2014-07-10
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多