我正在使用带有 ODP.NET 的 Oracle 11g 客户端。我正在尝试添加条件事务处理。
Dim ds As New DataSet()
Dim txn As OracleTransaction
Dim _beginTransaction as Bolean = true
Using conn As New OracleConnection(ConnString)
Try
conn.Open()
If _beginTransaction Then
txn = conn.BeginTransaction(IsolationLevel.Serializable)
End If
Dim adapter As OracleDataAdapter = New OracleDataAdapter()
adapter.SelectCommand = New OracleCommand(sSQL, conn)
For i As Integer = 0 To UBound(parameters, 1)
adapter.SelectCommand.Parameters.Add(parameters(i))
Next
adapter.Fill(ds)
If _beginTransaction Then
txn.Commit() //txn is undefined here? why?
End If
Catch e As Exception
txn.Rollback()
End Try
End Using
如何修复 txn 为空/空?错误是:变量“txn”在被赋值之前被使用。运行时可能会导致空引用异常。链接或指向解决方案的指针也将不胜感激。
编辑: 感谢 RichardOD 指出您不能明确声明不能通过 ODP.NET 在存储过程上打开事务。我已经验证这是一个问题。但是我们仍然没有弄清楚为什么会发生错误。我知道 txn 最初在 if 语句中被赋予了一个值,但是在 try/catch 块之外定义应该使这无关紧要......对吗?还是编码不好?