2010-10-11 90 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