OracleCommand Update не фиксирует изменения - PullRequest
1 голос
/ 11 октября 2010

Я использую следующий код для обновления таблицы в 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")`

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Спасибо всем за указание в правильном направлении. Это последний рабочий код. Хитрость заключалась в использовании 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
0 голосов
/ 11 октября 2010

В проекте, над которым я работаю, также используется OracleCommand.Большая разница в том, что все наши вызовы базы данных идут к хранимым процедурам, а не к динамическому SQL, который напрямую изменяет базу данных.Скорее всего, вам нужно будет обернуть оператор обновления в блоки «BEGIN» и «END» и, возможно, добавить «COMMIT;»заявление.

Берегись, хотя.По крайней мере одна версия библиотеки .NET для Oracle потерпит неудачу, если вы поместите возврат каретки и перевод строки в CommandText.Просто разделите точки с запятой.

...