【发布时间】:2010-12-20 21:00:33
【问题描述】:
我需要澄清一下 MS-DTC 在下面给出的场景中的行为方式
1) 我在事务范围内有多个连接(隔离级别 - ReadCommited),这将使 MS-DTC 现在生效:
a) MS-DTC 会自动将隔离级别更改为 SERIALIZABLE。
b) (Imp) 如果上面的答案是肯定的并且我已经实现了基于行版本控制的隔离级别,即除了 TransactionScope,我还启用了 READ_COMMITTED_SNAPSHOT 数据库选项“ON”,它是否仍然有效意味着它是否支持“ SERIALIZABLE”隔离级别。
void OuterMethod() {
TransactionOptions tso = new TransactionOptions();
tso.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew, tso)) {
InnerMethod("select * from testtable");
InnerMethod("update testtable set col1 = N'new value'");
tx.Complete();
}
}
static void InnerMethod(string sqlText) {
using (SqlConnection conn = SqlConnection(connStr)) {
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.ExecuteNonQuery();
}
}
谢谢
【问题讨论】:
标签: sql-server transactions isolation-level read-committed-snapshot