更改SQL隔离级别时SqlConnection的行为

3
根据 http://msdn.microsoft.com/en-nz/library/ms173763.aspx 中的注释部分:只能设置其中一个隔离级别选项,并且它会一直保持该连接的设置,直到显式更改。另外,根据http://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx,为了最小化打开连接的成本,ADO.NET 使用一种称为“连接池”的优化技术。这是否意味着如果在存储过程中更改了ISOLATION LEVEL,它会传递到下一个连接的使用?例如:
var con1 = new SqlConnection("<THE CONNECTION STRING>"); 

// ...call stored procedure altering isolation level with:
// SET TRANSACTION ISOLATION LEVEL SNAPSHOT

con1.Close();

var con2 = new SqlConnection("<THE CONNECTION STRING>"); 
// ... will this connection potentially have the altered isolation level?

编辑:有没有简单的方法来检查查询中使用的隔离级别?
1个回答

1

到A部分...

编号。

来自文档...

如果您在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL命令,则当对象返回控制权时,隔离级别将重置为调用对象时有效的级别。例如,如果您在批处理中设置了REPEATABLE READ,并且批处理随后调用将隔离级别设置为SERIALIZABLE的存储过程,则当存储过程将控制返回给批处理时,隔离级别设置将恢复为REPEATABLE READ。


这对我来说是个好消息,但有没有简单的方法来验证它?另外,我的理解是否正确,如果在C#应用程序中提供的SQL中更改了隔离级别(即不在存储过程中),那么连接的隔离级别可能会发生变化? - Emil L
如果您在创建连接时创建了隔离级别 - 它就是您的。但是如果您不小心,可能会出现潜在的泄漏问题。以下帖子涵盖了此问题以及如何检查该级别。https://dev59.com/22kw5IYBdhLWcg3wfKrZ - dbugger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接