1

VB.NET を介して Access のレコードを更新しようとしています。これはこれまでの私のコードです。目的は、バーコードを検索することです。バーコードに関連付けられたデータが返され、ユーザーはデータを変更して更新されたデータを保存できます。更新部分以外はすべて揃っています。これは、更新コードを含む私の保存ボタンです。これを明確にしたことを願っています。

編集:申し訳ありません。私の問題をすべてあなたに話すのを忘れていました。影響を受ける行は 0 行で、エラー メッセージは返されません。

 Private Sub btnEditProductSave_Click(sender As System.Object, e As System.EventArgs) Handles btnEditProductSave.Click
    'Creates Transaction and Connection Objects
    Dim Transaction As OleDb.OleDbTransaction = Nothing
    Dim connection As OleDb.OleDbConnection = Nothing

    Try

        'Assign the Connection 
        connection = New OleDb.OleDbConnection(My.Settings.POS_NEWConnectionString)
        'Opens the Connection and begins the Transaction
        connection.Open()
        Transaction = connection.BeginTransaction

        Dim barcode As String = txtEditProductBarcode.Text
        Dim name As String = txtEditProductName.Text
        Dim supplier As String = cbEditProductSupplier.SelectedValue
        Dim sell As Decimal = Val(txtEditProductSellPrice.Text)
        Dim quantity As Integer = numQuantity.Value
        Dim discount As Decimal = Val(txtEditProductDiscount.Text)
        Dim department As Integer = Val(txtEditProductDepartment.Text)

        Dim SQL As String = "UPDATE PRODUCT SET ProductName = @productName, SupplierId = @supplier, SellPrice = @sellPrice, Quantity = @quantity, DiscountPrice = @discount, DepartmentNumber = @dept WHERE ProductBarcode = @barcode"

        'Creates the Command for the Transaction
        Dim CT1 As New OleDb.OleDbCommand

        'Assigns a connection and transaction to a new command object
        CT1.Connection = connection
        CT1.Transaction = Transaction


        CT1.Parameters.AddWithValue("@barcode", barcode)
        CT1.Parameters.AddWithValue("@productName", name)
        CT1.Parameters.AddWithValue("@supplier", supplier)
        CT1.Parameters.AddWithValue("@sellPrice", sell)
        CT1.Parameters.AddWithValue("@quantity", quantity)
        CT1.Parameters.AddWithValue("@discount", discount)
        CT1.Parameters.AddWithValue("@dept", department)

        CT1.CommandText = SQL

        Dim number As Integer = CT1.ExecuteNonQuery

        MsgBox(number & " of row were affected")

        CT1.Dispose()

    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try
End Sub
4

1 に答える 1

1

OleDb のパラメーターは、名前ではなくインデックス順です。

この方法を試してください(バーコードパラメータが最後):

    CT1.Parameters.AddWithValue("@productName", name)
    CT1.Parameters.AddWithValue("@supplier", supplier)
    CT1.Parameters.AddWithValue("@sellPrice", sell)
    CT1.Parameters.AddWithValue("@quantity", quantity)
    CT1.Parameters.AddWithValue("@discount", discount)
    CT1.Parameters.AddWithValue("@dept", department)
    CT1.Parameters.AddWithValue("@barcode", barcode)

また、BeginTransactionコミットはありません。

次のようになります。

Dim tx As OleDb.OleDbTransaction = connection.BeginTransaction

// blah - blah - blah

tx.Commit()
于 2012-10-30T19:19:39.487 に答える