Vb.net 一个OracleConnection中有多个数据库命令

Vb.net 一个OracleConnection中有多个数据库命令,vb.net,oracle,odp.net,transactionscope,Vb.net,Oracle,Odp.net,Transactionscope,假设我有以下代码: Dim sqlText as String = "MERGE INTO..." Using scope As New TransactionScope() Using conn As New OracleConnection(connString) conn.Open() Using oCommand As New OracleCommand(sqlText) oCommand.BindByName = Tr

假设我有以下代码:

Dim sqlText as String = "MERGE INTO..."

 Using scope As New TransactionScope()
    Using conn As New OracleConnection(connString)
        conn.Open()
        Using oCommand As New OracleCommand(sqlText)
            oCommand.BindByName = True
            oCommand.Parameters.Add("param1",OracleDbType.Raw,value1,ParameterDirection.Input)
            oCommand.Parameters.Add("param2",OracleDbType.IntervalDS,value2,ParameterDirection.Input)
            // etc.
            oCommand.Connection = conn
            oCommand.Prepare()
            oCommand.CommandType = CommandType.Text
            oCommand.ExecuteNonQuery()
        End Using
    End Using
End Using
如果我想使用不同的参数(例如,我将对象列表放入数据库)但使用相同的代码执行多个合并到…,那么在哪里最好?我是将环路放在“使用连接…”的内部还是外部

e、 g:

当我把它放在外面(第二个)时,我得到一个错误:

Promote方法为分布式数据库返回了无效的值 交易

---编辑---

好的,我找到了答案,它回答了关于错误的部分(一个TransactionScope中的多个连接导致了问题)-所以我必须将每个命令作为一个单独的事务来执行?或者,只连接一次,并在其中完成所有操作


有人能帮我理解如何使用同一个OracleConnection对象和SQL进行多次写入,但参数不同吗?

当我做这种事情时,我希望所有命令都在同一个事务中,我的循环实际上会在使用oCommand的
块中


设置一次命令(即超时、命令类型、连接等),然后循环将设置参数并重复执行。

合并语句的执行应在
使用conn的内部…
,否则您将无法使用数据库连接。祝你好运。好的,对不起,问题不清楚,我会告诉你你收到的错误是ORA错误吗?如果是,请提供错误号和完整的错误消息。回答错误部分(我将更新问题)
Dim items as List(Of ItemsToPutIntoDatabase) = ...
Using scope as New TransactionScope()
    For Each item
        Using conn...
Dim items as List(Of ItemsToPutIntoDatabase) = ...
Using scope as New TransactionScope()
    Using conn...
        For Each item