插入db中的2列后更新新列

时间:2013-04-13 11:28:55

标签: vb.net ms-access-2007

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

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是一个字符串,其值在anoter子函数中赋值。 在这里它给出错误为“没有给出一个或多个所需参数的值......”

请解决我的问题

1 个答案:

答案 0 :(得分: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参数。现在,参数集合的顺序与占位符在命令文本中的位置相同。