1

次のコードを使用して、Oracle のテーブルを更新しています。実行されますが、更新はコミットされません。Oracle SQL Developer でクエリを実行すると、問題なく動作します。私は何が欠けていますか?SELECT ステートメントは期待どおりに機能します。

`Dim BillOfLadingNumber As String = txtBillOfLadingNumber.Text.Trim

    Dim TrailerNumber As String = txtTrailerNumber.Text.Trim
    Dim CarrierCode As String = txtCarrierCode.Text.Trim
   Dim TransportationMethod As String = txtTransportationMethod.Text.Trim 
   Dim OracleCommand As New OracleCommand()
    With OracleCommand
        .Connection = OracleConnection
        .CommandType = CommandType.Text
        .CommandText = "UPDATE XXF_ASN_HEADERS SET BILL_OF_LADING_NUMBER ='" + BillOfLadingNumber + "',TRAILER_NUMBER ='" + TrailerNumber + "',CARRIER_CODE ='" + CarrierCode + "',TRANSPORTATION_METHOD ='" + TransportationMethod + "' WHERE HEADERID ='" + Request.QueryString("HeaderId") + "'"
    End With

    OracleConnection.Open()
    Dim result As Integer = OracleCommand.ExecuteNonQuery()
    OracleConnection.Close()

    If result = 1 Then Response.Redirect("default.aspx")`
4

2 に答える 2

2

正しい方向に私を指摘してくれてありがとう。これが最終的な作業コードです。トリックは OracleTransaction を使用することでした。以下のコードは魅力のように機能します。パラメータの使用は次のとおりです。詳細はこちら

            Using dbConnection As New OracleConnection(OracleConnectionString)

                'Open the connection
                dbConnection.Open()

                Dim dbCommand As OracleCommand = dbConnection.CreateCommand()
                Dim dbTransaction As OracleTransaction

                'Start a local transaction 
                dbTransaction = dbConnection.BeginTransaction(IsolationLevel.ReadCommitted)
                'Assign transaction object for a pending local transaction
                dbCommand.Transaction = dbTransaction

                Try
                    dbCommand.CommandType = CommandType.Text
                    dbCommand.CommandText = "UPDATE XXF_ASN_HEADERS SET BILL_OF_LADING_NUMBER ='" + BillOfLadingNumber + "', TRAILER_NUMBER ='" + TrailerNumber + "', CARRIER_CODE ='" + CarrierCode + "', TRANSPORTATION_METHOD ='" + TransportationMethod + "' WHERE HEADERID ='" + Request.QueryString("HeaderId") + "'"
                    dbCommand.ExecuteScalar()
                    dbTransaction.Commit()
                    Response.Redirect("default.aspx")
                Catch ex As OracleException
                    'Rollback the transaction
                    dbTransaction.Rollback()
                    'display error details
                    lblUpdateQuery.Text = dbCommand.CommandText
                    lblDebug.Text = ex.Message.ToString
                End Try

            End Using
于 2010-10-12T03:13:58.907 に答える
0

私が取り組んでいるプロジェクトでも OracleCommand を使用しています。大きな違いは、すべてのデータベース呼び出しが、データベースを直接変更する動的 SQL ではなく、ストアド プロシージャに送られることです。ほとんどの場合、更新ステートメントを「BEGIN」および「END」ブロックでラップし、おそらく「COMMIT;」を追加する必要があります。声明。

でも気をつけて。CommandText にキャリッジ リターンとライン フィードを挿入すると、少なくとも 1 つのバージョンの Oracle 用 .NET ライブラリが失敗します。セミコロンで区切るだけです。

于 2010-10-11T16:09:58.873 に答える