我想要的是能够从表中读取旧数据,而一些事务正在写入同一个表。当这样的原子写入完成后,我想用新的数据替换旧数据。
我正在处理的事务很长,我不想启用脏读,也不想阻止读取的可能性。
我在我的数据库上打开了快照隔离级别:
SET ALLOW_SNAPSHOT_ISOLATION ON
并使用这样的代码在事务中写入数据:
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions
{ IsolationLevel = IsolationLevel.Snapshot }))
{
update();
scope.Complete();
}
不幸的是,当我尝试使用SELECT * FROM [Table]
Microsoft SQL Server Management Studio 读取一些数据时,查询执行正在等待消息Executing query...
,并在事务完成后检索数据。我错过了什么?
编辑: update() 的代码 - 基本上是循环中的简单插入,混合了与 WCF 连接的没有 db 相关的东西,这会减慢进程:
var val = Web.Download();
using (var connection = new SqlConnection(connection))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = "INSERT INTO [table]([value]) VALUES (@val)";
command.Parameters.Add(CreateParam(command, "@val", val, DbType.String));
command.ExecuteNonQuery();
}
}