2010-10-11 79 views
1

我正在使用以下代碼更新oracle中的表。它執行但更新不提交。如果我用Oracle SQL Developer運行查詢,它可以正常工作。我錯過了什麼? SELECT語句按預期工作。OracleCommand更新不提交更改

`昏暗BillOfLadingNumber的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")` 
+5

解決方案的不一部分,但你確實應該使用參數 – 2010-10-11 16:05:34

+0

是否有未提交的事務,範圍是什麼? – 2010-10-11 16:08:13

+0

是的,使用OracleTransaction對象是主鍵。謝謝你們。 – 2010-10-12 03:15:05

回答

1

謝謝大家指出我在正確的方向。這是最終的工作代碼。訣竅是使用OracleTransaction,下面的代碼就像一個魅力。下一個參數使用。更多信息可以發現here

  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

我正在使用的OracleCommand以及該項目。最大的區別是我們所有的數據庫調用都是存儲過程,而不是直接改變數據庫的動態sql。很可能,您需要將更新語句包裝在「BEGIN」和「END」塊中,並可能添加「COMMIT;」聲明。

儘管如此。如果將回車符和換行符放入CommandText中,至少有一個用於Oracle的.NET庫版本將失敗。用分號分隔事物。

+0

第二個選擇是使用存儲過程,但我試圖擺脫SP的方式來消除維護這個應用程序的複雜性(將它交給初級開發人員)。這不是一個巨大的應用程序,所以做一些N層推廣會過度,但你確實幫助我解決了我打開的另一個問題。謝謝。 – 2010-10-12 03:17:57