我在数据层使用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,那么任何人都可以建议。 此更改的目的是保持连接打开最短时间。
你觉得这种做法有什么不利之处吗?
答案 0 :(得分:0)
你应该没事我认为只要你使用SQL 2K8或更高版本。只是不要一次打开多个连接,并且不要打开与第一个连接之外的其他服务器的第二个连接。见TransactionScope automatically escalating to MSDTC on some machines?