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

时间:2014-12-01 02:48:50

标签: c# sql-server

根据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,那么下次使用连接时会将其转移给其他人? E.g。

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 个答案:

答案 0 :(得分:1)

到A部分......

NO。

来自docs ...

  

如果您在存储过程中发出SET TRANSACTION ISOLATION LEVEL或   触发器,当对象返回控制时,隔离级别被重置   到调用对象时生效的级别。例如,如果   你批量设置REPEATABLE READ,然后批处理调用存储   将隔离级别设置为SERIALIZABLE,隔离的过程   级别设置在存储过程时恢复为REPEATABLE READ   将控制权返回给batc