2012-08-30 63 views
0

我想用VB.Net更新記錄。這是代碼。它不會給出任何錯誤。但是每次運行這段代碼時,我都希望變量newbal會增加。它不會發生。這意味着更新聲明不起作用。任何解決方法?更新oracle語句不起作用

Dim cmd5 As New OracleCommand 
cmd5.Connection = conn 
cmd5.CommandText = "SELECT * FROM d009022 WHERE prdacctid = :custid AND lbrcode = :lbrcode" 
cmd5.Prepare() 
cmd5.Parameters.Add(":custid", customernumber) 
cmd5.Parameters.Add(":lbrcode", lbr) 
Try 
    Dim drs As OracleDataReader = cmd5.ExecuteReader() 
    drs.Read() 
    Dim oldbal As Decimal = drs.Item("SHDCLRBALFCY") 
    Dim newbal As Integer = CInt(oldbal) + CInt(amount) 

    Dim cmd6 As New OracleCommand 
    cmd6.Connection = conn 
    cmd6.CommandText = "UPDATE d009022 SET shdclrbalfcy = :newbal WHERE prdacctid = :custnum AND lbrcode = :lbr" 
    cmd6.Prepare() 
    cmd6.BindByName = True 
    cmd6.Parameters.Add(":newbal", newbal) 
    cmd6.Parameters.Add(":custnum", customernumber) 
    cmd6.Parameters.Add(":lbr", lbr) 
    cmd6.ExecuteNonQuery() 
+0

是'可能爲零amount'? –

+0

不,我每次追蹤它,它的200. – user1051505

+0

@Tim Schmelter:有什麼幫助嗎?我仍然在努力:( – user1051505

回答

3

你應該使用這種結構與Oracle管理事務(見MSDN docs):

Public Sub RunOracleTransaction(ByVal connectionString As String) 
    Using connection As New OracleConnection(connectionString) 
     connection.Open() 

     Dim command As OracleCommand = connection.CreateCommand() 
     Dim transaction As OracleTransaction 

     ' Start a local transaction 
     transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted) 
     ' Assign transaction object for a pending local transaction 
     command.Transaction = transaction 

     Try 
      command.CommandText = _ 
       "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')" 
      command.ExecuteNonQuery() 
      command.CommandText = _ 
       "INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')" 
      command.ExecuteNonQuery() 
      transaction.Commit() 
      Console.WriteLine("Both records are written to database.") 
     Catch e As Exception 
      transaction.Rollback() 
      Console.WriteLine(e.ToString()) 
      Console.WriteLine("Neither record was written to database.") 
     End Try 
    End Using 
End Sub 
+0

感謝它幫助! – user1051505

+0

@ user1051505:很高興幫助。 – LeftyX

2

甲骨文要求提供明確的承諾,可能丟失

+0

我該如何明確提交? – user1051505

+0

當我們在java中使用任何查詢時,可以選擇提交查詢,您必須在VB中檢查它 – NoNaMe

+0

@ user1051505:只需將「COMMIT;'命令發送給數據庫 –