当我在 ADO.NET 中阅读时另一个进程更新记录时会发生什么

克劳迪奥·费拉罗

假设我在 C# 中有这个脚本

  ....
  string _commandStr = "SELECT * FROM products";

  if (connection.State == System.Data.ConnectionState.Closed)
       connection.Open();
  SqlCommand cmd = new SqlCommand(_commandStr, connection);
  var reader = cmd.ExecuteReader();
  while (reader.Read())
  {
      ...some expensive formatting operation. This cycle takes minutes
  }

现在,如果另一个进程在 READ 循环运行时将 Record 附加到 products 表会发生什么?在周期结束之前,最终记录是否可用?

丹·古兹曼

SELECT查询是否返回新插入(和提交)的行取决于:

  1. 事务当前会话隔离级别
  2. 读提交的快照数据库选项
  3. select 查询扫描点是在新行位置之前还是之后。

关闭选项READ_COMMITTED的数据库中使用隔离级别READ_COMMITTED_SHAPSHOT时,可能会或可能不会返回新行,具体取决于新插入的行是在SELECT查询扫描点之前还是之后

随着READ_COMMITTED与数据库的隔离级别READ_COMMITTED_SHAPSHOT的选项,新行将不予退还。查询结果反映了SELECT查询开始时的数据,因此不会返回新插入的行。

使用SNAPSHOT隔离级别,查询结果反映SELECT查询(或显式事务)开始时的数据,因此不会返回新插入的行。

使用REPEATABLE_READ隔离级别,根据新行是在SELECT查询扫描点之前或之后插入之前,可能会或可能不会返回新行

使用SERIALIZABLE隔离级别,不会返回新行,因为在SELECT查询全扫描期间并发插入将被阻止

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

春季:当我们将@ComponentScan移到包中的另一个类时会发生什么?

当我在运行中的Visual Studio 2013中的另一个项目上打开一个项目时会发生什么?

ADO .Net RESTful部分更新

当我们在@Bean中创建新类并在另一个@Bean中在@Bean中使用时会发生什么?

当我把它放在另一个项目 OData .Net Core 中时,控制器不工作

当我们从另一个char整数减去一个char整数时会发生什么?

在angular 2上,当我从一个大库中仅导入一个模块时,构建时会发生什么?

当我将一个布尔数据帧传递给 Pandas 中另一个数据帧的索引运算符时会发生什么?

我可以将ado.net与signalR一起使用吗

当我向子网添加一个空的 nsg 时会发生什么变化?

当我定义一个抽象类而不是声明时会发生什么。

当我们git checkout一个提交时会发生什么

如何减少ado.net中的代码

在 ADO.NET 中执行 SUM 查询

当我从静态ArrayList中获取一个对象并更改其参数时会发生什么?

在Python 3中,当我索引一个字节数组时会发生什么?

当我在Clojure中从多个线程定义一个变量时会发生什么情况?

如何将表索引复制到ado.net中的另一个表

当我更新另一个表中的字段时更新表中的字段

我应该选择实体框架还是ADO.Net?

ADO.NET 正在寻找我不想使用的 DbProvider

当我在Xcode IDE中“保存”时会发生什么

ASP.Net 5中的ADO.Net

当我创建一个自动属性时,后台会发生什么?

当我添加一个新的VB.NET时ArrayList更改值

当我有两个指针指向同一个对象时会发生什么?

当我们在微任务队列中返回一个值并从 then() 链返回一个 Promise.resolve 时会发生什么?

从数据库生成的ADO.NET数据模型遗漏了我的一张表

为什么当我将存储在一个变量中的对象分配给另一个变量时,当我更改一个变量时,这两个变量都会发生变化?