【发布时间】:2014-09-22 15:04:16
【问题描述】:
有没有办法从System.Transactions.TransactionScope 或System.Data.SqlClient.SqlConnection 的实例中获取System.Data.SqlClient.SqlTransaction?
假设我是 using TransactionScope 但想将 SqlTransaction 传递给一些遗留代码。是否可以从TransactionScope 或SqlConnection 获得Transaction?
Using scope As TransactionScope = GetTransactionScope()
Using conn As SqlClient.SqlConnection = GetConnection(Globals.ConnectionString)
conn.Open() 'this will automatically enlist itself in a transaction if there is an ambient one created by `TransactionScope`
LegacyFunction(transaction) '<-- how can I get the `transaction` here??
ExecuteSQL(conn, sql, params)
conn.Close()
End Using
scope.Complete()
End Using
【问题讨论】:
-
为什么要在 Legacyfunction 中传递它??因为您的代码已经在 TransactionScope 块下运行。
-
这是一个接受
System.Data.SqlClient.SqlTransaction作为参数的旧函数。我无法更改该功能,但我想使用TransactionScope。我想我可以使用System.Transactions.Current,但这不会返回System.Data.SqlClient.SqlTransaction。 -
大概你的 ExecuteSQL 做了一些涉及 SQLCommand 的事情?您是否查看过SqlCommand.Transaction Property 在入伍时是否已设置?
标签: .net sql-server vb.net