一个 OracleConnection 中的多个数据库命令
Multiple database commands in one OracleConnection
假设我有以下代码:
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
如果我想用不同的参数执行多个 MERGE INTO...(例如,我将一个对象列表放入数据库)但代码相同,那么最好在哪里执行此操作?我是将循环放在 "Using conn..." 内部还是外部?
例如:
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
当我把它放在外面时(第二个),我得到一个错误:
The Promote method returned an invalid value for the distributed
transaction.
---编辑---
好的,所以我找到了 using TransactionScope : System.Transactions.TransactionAbortedException: The transaction has aborted,它回答了有关错误的部分(一个 TransactionScope 内的多个连接导致了问题)- 所以我必须将每个命令作为一个单独的事务来执行?或者,只连接一次并在其中执行所有操作。
有人可以帮助我了解如何使用相同的 OracleConnection 对象和 SQL 但不同的参数进行多次写入吗?
当我做这种事情时,我希望所有命令都在同一个事务中,我的循环实际上会在 Using oCommand
块内。
设置您的命令一次(即超时、命令类型、连接等),然后您的循环将设置参数并重复执行。
假设我有以下代码:
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
如果我想用不同的参数执行多个 MERGE INTO...(例如,我将一个对象列表放入数据库)但代码相同,那么最好在哪里执行此操作?我是将循环放在 "Using conn..." 内部还是外部?
例如:
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
当我把它放在外面时(第二个),我得到一个错误:
The Promote method returned an invalid value for the distributed transaction.
---编辑---
好的,所以我找到了 using TransactionScope : System.Transactions.TransactionAbortedException: The transaction has aborted,它回答了有关错误的部分(一个 TransactionScope 内的多个连接导致了问题)- 所以我必须将每个命令作为一个单独的事务来执行?或者,只连接一次并在其中执行所有操作。
有人可以帮助我了解如何使用相同的 OracleConnection 对象和 SQL 但不同的参数进行多次写入吗?
当我做这种事情时,我希望所有命令都在同一个事务中,我的循环实际上会在 Using oCommand
块内。
设置您的命令一次(即超时、命令类型、连接等),然后您的循环将设置参数并重复执行。