TransactionScope:连接将升级到MSDTC

时间:2016-05-04 09:23:57

标签: c# .net sql-server transactionscope msdtc

我在数据层使用TransactionScope并避免MSDTC我保持一个连接打开直到事务范围完成。 我发现这种方法存在问题,因为它保持连接打开并占用完整的事务处理。从事务范围内调用的方法可能需要更长的时间(可能是1分钟)。 因此,我修改了我的方法,即不使用一个连接,而是在需要时打开和关闭与同一数据库的连接。

喜欢这样:

using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using(SqlCommand sqlc = new SqlCommand(statement, Connection, transaction))
    {
        //Execute some commands
    }
    connection.Close();
}
SomeLongRunningTask();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using(SqlCommand sqlc = new SqlCommand(statement, Connection, transaction))
    {
        //Execute some commands
    }
    connection.Close();
}
...
...
...
scope.Complete();
}

如果此代码仍然可以将TransactionScope升级为MSDTC,那么任何人都可以建议。 此更改的目的是保持连接打开最短时间。

你觉得这种做法有什么不利之处吗?

1 个答案:

答案 0 :(得分:0)

你应该没事我认为只要你使用SQL 2K8或更高版本。只是不要一次打开多个连接,并且不要打开与第一个连接之外的其他服务器的第二个连接。见TransactionScope automatically escalating to MSDTC on some machines?