0

我正在使用以下代码将记录从另一个表插入到一个表中......

Private Sub InsDuplicateDB()

    Dim strInsDup As String = "INSERT INTO Duplicate_srno(Sr_no,chalan_no) SELECT sr_no,chaln_no FROM Vendor_Machine where sr_no=@srno"
    Dim comm_InsDup As OleDb.OleDbCommand = New OleDb.OleDbCommand(strInsDup, cnnOLEDB)
    comm_InsDup.Parameters.AddWithValue("@srno", cmbSn_no.Text)
    comm_InsDup.ExecuteNonQuery()

    Dim strUpdDup As String = "UPDATE Duplicate_srno SET sr_no = @srno,chaln_no =@chn_no,Problem=@problemWHERE sr_no = @srno AND chalan_no=@chn_no"
    Dim comm_Update As OleDb.OleDbCommand = New OleDb.OleDbCommand(strUpdDup, cnnOLEDB)

    comm_Update.Parameters.AddWithValue("@srno", cmbSn_no.Text)
    comm_Update.Parameters.AddWithValue("@chn_no", cmbChal_no.Text)
    comm_Update.Parameters.AddWithValue("@problem",strProb)

    comm_Update.ExecuteNonQuery()

End Sub

这里 strProb 是一个字符串,其值在另一个子函数中分配。这里它给出错误为“没有为一个或多个必需参数提供值..”

请解决我的问题

4

1 回答 1

1

我不知道这是否是拼写错误,但更新字符串在参数名称@problem 和 WHERE 子句之间缺少空格

Dim strUpdDup As String = "UPDATE Duplicate_srno SET sr_no = @srno,chaln_no =@chn_no," & _
                          "Problem=@problem WHERE sr_no = @srno AND chalan_no=@chn_no"
                                           ^ 

但是可以简化更新字符串,因为您正在使用 where 子句中使用的相同值更新两个字段

Dim strUpdDup As String = "UPDATE Duplicate_srno SET Problem=@problem " & _
                          "WHERE sr_no = @srno AND chalan_no=@chn_no"

除了缺少的空间,错误消息说引擎需要更多参数。
在 OleDb 中,参数的名称无法识别。您需要与字符串中的占位符定义的参数数量相同。在您的原始文本中,您有 5 个占位符,但您只添加了 3 个参数。他们两个是否相同并不重要。

修改后的代码可能如下

Dim strUpdDup As String = "UPDATE Duplicate_srno SET Problem=@problem " & _
                          "WHERE sr_no = @srno AND chalan_no=@chn_no"

Dim comm_Update As OleDb.OleDbCommand = New OleDb.OleDbCommand(strUpdDup, cnnOLEDB)
comm_Update.Parameters.AddWithValue("@problem",strProb)
comm_Update.Parameters.AddWithValue("@srno", cmbSn_no.Text)
comm_Update.Parameters.AddWithValue("@chn_no", cmbChal_no.Text)

请注意我如何将@problem参数添加为集合中的第一个。现在,参数集合的顺序与占位符在命令文本中出现的顺序相同。

于 2013-04-13T13:01:26.610 回答