17

我有一些代码类似于建议使用 TransactionScope,但有环境连接而不是环境事务。

有没有办法将 TransactionScope 对象与现有连接一起使用,或者.Net 框架中是否有用于此目的的替代方法?

4

3 回答 3

32

事实上,有一种方法。

connection.EnlistTransaction(Transaction.Current)

它有效,并且如果没有必要,它不会将事务推广到分布式(与文档所说的相反)

高温高压

于 2010-07-01T16:11:58.683 回答
5

要将连接登记到 TransactionScope,您需要'Enlist=true'在其连接字符串中指定并在该 TransactionScope 对象的范围内打开连接。

您可以 SqlConnection.BeginTransaction在现有连接上使用。

更新:你可以BeginTransaction这样使用:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand command = connection.CreateCommand();
    SqlTransaction transaction;

    // Start a local transaction.
    transaction = connection.BeginTransaction("SampleTransaction");

    // Must assign both transaction object and connection
    // to Command object for a pending local transaction
    command.Connection = connection;
    command.Transaction = transaction;

    ...
    ...

}
于 2009-06-01T10:55:20.480 回答
2

经过更多研究,我的问题的答案原来是:

不,需要在实例化 TransactionScope 对象后打开连接。

于 2009-06-10T08:57:15.040 回答