У меня есть процесс, в котором я передаю свое соединение с оракулом и транзакцию по ссылке. Все мои вставки/удаления работают нормально. Однако одно из обновлений проходит нормально, однако данные в базе данных не обновляются.
Мне интересно, распоряжаюсь ли я объектом qry незадолго до того, как зафиксирую, и в этом причина. Это моя первая попытка использовать транзакцию оракула, и все образцы, которые я нашел в Интернете, похоже, делают это для каждого метода. Мне нужно убедиться, что он проходит через весь мой процесс, прежде чем я совершу коммит, иначе я хочу откатиться.
Using conn As New OracleConnection(myObject.ConnectionString)
conn.Open()
Dim myTrans As OracleTransaction
myTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted)
Try
If ClassName.Insert(conn, myTrans) THEN
'Insert Happened
End If
If ClassName.Update(conn, myTrans) THEN
End If
If ClassName.Delete(conn, myTrans) THEN
End If
MyTrans.Commit()
Catch ex As Exception
myTrans.Rollback()
Finally
'Close connection
If conn.State <> ConnectionState.Closed AndAlso conn.State <> ConnectionState.Connecting Then
conn.Close()
conn.Dispose()
End If
End Try
End Using
Вот простой пример моей функции обновления класса.
Public Function Update(ByRef conn As OracleConnection, ByRef myTrans As OracleTransaction) As Boolean
Dim result As Boolean = False
Try
Dim sql As String = ""
sql = sql & "UPDATE TABLENAME "
sql = sql & " SET"
sql = sql & " xyz = :xyz"
sql = sql & " WHERE id = :id"
Using qry As New OracleCommand(sql, conn)
qry.Transaction = myTrans
qry.Parameters.Add("id", OracleDbType.Decimal, Me.ID, ParameterDirection.Input)
qry.ExecuteNonQuery()
result = True
qry.Dispose()
End Using
Catch ex As Exception
Finally
End Try
Return result
End Function
При обновлении не происходит ошибки, запись никогда не обновляется в БД.