Azure SQL-使用ADO.NET时的默认隔离级别

Azure SQL-使用ADO.NET时的默认隔离级别,azure,ado.net,azure-sql-database,Azure,Ado.net,Azure Sql Database,在Azure SQL中,默认隔离级别为RCSI。我理解这种行为。据我所知,对我来说,当通过简单的ADO.NET SqlConnection选择数据时,需要使用read committed。我很难理解在进行简单选择时是否应用了行版本控制。使用SqlConnection时应用的默认隔离级别是什么 编辑 从这里开始: 我读 在数据库中启用快照隔离时,READ_COMMITTED_SNAPSHOT database选项确定默认READ COMMITTED隔离级别的行为。如果未明确指定“已提交的读取”快照

在Azure SQL中,默认隔离级别为RCSI。我理解这种行为。据我所知,对我来说,当通过简单的ADO.NET SqlConnection选择数据时,需要使用read committed。我很难理解在进行简单选择时是否应用了行版本控制。使用SqlConnection时应用的默认隔离级别是什么

编辑 从这里开始:

我读

在数据库中启用快照隔离时,READ_COMMITTED_SNAPSHOT database选项确定默认READ COMMITTED隔离级别的行为。如果未明确指定“已提交的读取”快照,则“已提交的读取”将应用于所有隐式事务。这将产生与将READ_COMMITTED_SNAPSHOT设置为OFF(默认设置)相同的行为。当READ_COMMITTED_SNAPSHOT OFF生效时,数据库引擎使用共享锁强制执行默认隔离级别。如果将READ_COMMITTED_SNAPSHOT database选项设置为ON,则数据库引擎将使用行版本控制和快照隔离作为默认设置,而不是使用锁来保护数据


这是否意味着数据库只是将所有默认事务升级到RCSI,从而在未指定特定事务级别的情况下对所有事务应用行版本控制?所以SqlConnection只是默认为RCSI,而不是默认的readcommitted

Azure SQL数据库默认的数据库范围设置是通过将“读取提交的快照”和“允许快照”隔离数据库选项都设置为“开”,来启用“读取提交的快照隔离”(RCSI)。不能更改数据库默认隔离级别。但是,您可以显式地控制连接上的隔离级别。一种方法是,在开始事务之前,可以在Azure SQL数据库中使用以下任一语句:

SET TRANSACTION  ISOLATION LEVEL  SERIALIZABLE
SET TRANSACTION  ISOLATION LEVEL  SNAPSHOT
SET TRANSACTION  ISOLATION LEVEL  REPEATABLE READ
SET TRANSACTION  ISOLATION LEVEL  READ COMMITTED
SET TRANSACTION  ISOLATION LEVEL  READ UNCOMMITTED
SET-Transaction隔离级别控制连接到SQL Server并跨越批处理(GO语句)发出的Transact-SQL语句的锁定和行版本控制行为。以上所有工作原理与SQLServer完全相同


此外,上面的语句“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”将隔离级别设置为READ COMMITTED snapshot ISOLATION(RCSI)。此隔离级别不同于读提交(RC)。换句话说,本地SQL Server中“设置事务隔离级别读取提交”的默认行为是RC,而Azure SQL数据库中的默认行为是RCSI在Azure SQL数据库中的行为,您必须将lock READCOMMITEDLOCK设置为SQL语句。

因此,启用RCSI后,以前处于读取提交状态的所有事务现在都进行了行版本控制。我不必在代码中执行任何操作。默认情况下,所有操作都运行RCSI,行版本控制也已就绪。您不必执行任何操作。您可以在需要时,通过设置事务隔离级别来管理该行为。