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 は、別のサブ関数で値が割り当てられている文字列です。ここでは、「1 つ以上の必須パラメーターに値が指定されていません..」というエラーが発生します。

私の問題を解決してください

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 句で使用される同じ値で 2 つのフィールドを更新しているため、更新文字列は単純化できます。

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

不足しているスペースとは別に、エラー メッセージは、エンジンがより多くのパラメーターを予期していることを示しています。
OleDb では、パラメーターは名前で認識されません。文字列内のプレースホルダーによって定義されているのと同じ数のパラメーターが必要です。元のテキストには 5 つのプレースホルダーがありますが、追加するパラメーターは 3 つだけです。2つが同じかどうかは問題ではありません。

改訂されたコードは次のようになります

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 に答える