2012-08-30 61 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;'命令发送给数据库 –