【发布时间】:2015-10-21 07:23:41
【问题描述】:
当我使用 SNAPSHOT 隔离级别处理更新冲突问题时,自动提交事务似乎使用上次使用的隔离级别。
条件:ALLOW_SNAPSHOT_ISOLATION 为 ON,READ_COMMITTED_SNAPSHOT 为 OFF
第 1 步:在没有事务的情况下执行更新语句
using (var sqlconn = new SqlConnection("Data source=..."))
using (var sqlcmd = sqlconn.CreateCommand())
{
sqlconn.Open();
sqlcmd.CommandText = "Update ..."
sqlcmd.ExecuteNonQuery();
}
然后查看sys.md_exec_sessions,发现事务隔离级别为READCOMMITTED。
第 2 步:使用 SNAPSHOT 隔离级别的事务执行更新语句
using (var sqlconn = new SqlConnection("Data source=..."))
{
sqlconn.Open();
using (var sqltran = sqlconn.BeginTransaction(IsolationLevel.Snapshot))
using (var sqlcmd = sqlconn.CreateCommand())
{
sqlconn.Open();
sqlcmd.CommandText = "Update ..."
sqlcmd.ExecuteNonQuery();
}
}
隔离级别为Snapshot,效果不错。
第 3 步:再次执行第 1 步
隔离级别为Snapshot。
我希望第 3 步显示 READCOMMITTED 导致 READ_COMMITTED_SNAPSHOT 处于关闭状态。
我有两个想法,但我无法得出结论。
- dm_exec_sessions 将不包含有关自动提交事务的信息
- 自动提交事务实际使用
SNAPSHOT
任何想法都会受到赞赏。
谢谢,
【问题讨论】:
标签: c# sql-server transactions ado.net