浅谈ADO.NET文章系列之二 — 并发更新冲突的处理

ADO.NET实现并发控制 常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。 立即下载

浅谈ADO.NET文章系列之二 — 并发更新冲突的处理

 

声明:这里只对并发冲突做简单的分析,所以在前面冠以“浅谈”二字,希望大家可以从中看到一般的处理方法和注意的事项,如果有什么疏漏,那也相当地自然,毕竟本人水平有限,还有很多需要提高的地方,希望各位朋友不吝指正!

 

一.为什么会产生并发

在我们使用ado.net对数据库中数据进行操作时,很有可能这种操作或类似地操作也在

网络内其他用户中进行着,那么就难以避免地会遇到更新操作失败的情况。因为为了更好地提高性能,ado.net采用了断开连接的方式。也就是说要先把数据的副本读取到客户端,那么也容易引起多个用户同时更新一条记录产生数据并发异常。这个操作,很可能是其他用户删除了该行记录,也可能是修改了某个字段。这个问题是个高级话题,也一直是数据操作中的难点。在下面我只做简单地讨论和分析。

二.解决方案

通常处理并发冲突的方法有两个。一个是保守式并发处理,一个是开放式并发处理。所

谓的保守式并发处理,就是使用锁使某条记录被读出后就一直被锁定,直到该用户提交更新。它的坏处正如它的名字一样,相当地保守。因为如果该用户读完该条数据后就因为有事情而离开或者忘记了来点“更新”操作,那么其他用户要一直等待,直到他回来或者被提醒或者自己想起来。很明显,这不是我们想要看到的(当然,在特定的要求和条件下该方法也有它的优点,否则它也没有存在的必要了)。相反,开放式并发是我们所要讨论的重点,这个也是ado.net推荐使用的方法。什么是开放式并发处理方法呢?我自己的理解就是要面对并发异常的出现,制定处理方法来解决或者提示用户这种异常的出现。既然并发不可避免,那么我们就要作好处理并发冲突的解决方案。这就象一个乐观的人一样,他有了疾病,他的心态依然是乐观向上的一样,他要把重点放在如何治疗上而不是彻底地避免(这个比喻可能不太恰当,见笑了!呵呵)。在写程序前要考虑到并发出现的可能,根据自己的需要来选择更新逻辑和方式。

三.浅论开放式并发处理的要注意的地方。(这里也是最容易引起问题的地方,大家要多提意见啊!)

 

1.  更新方式的选择  一般来说,更新方式有缓存更新和立即更新两种。缓存更新,就是使用dataadapter.updte()方法来进行数据的更新。我们可能在datagrid中修改了很多记录,而只进行一次提交,那么这种操作如果从读取数据开始(或上次更新操作)算起所距离的时间越长,也就越容易引起并发冲突。相对来说,立即更新,也就是使用command.executenoquery()方法,直接来提交对一条记录的修改应该比较快捷,但仍然不能完全避免冲突的出现,但仍然是我推荐的方式。

2.  更新逻辑的选择  更新逻辑:我理解的就是按照哪种更新的方式来对数据进行更新操作。它可以是包含所有列的;可以是只包含主键列的;可以是包含主键列和被更新列的;可以是包含主键列和时间戳列的。我们来看这4中更新逻辑的差异。如果你以前用过Pb来进行编程,那么可能你理解起来就相对容易。因为pb

处理多用户更新数据并发问题 编程小实例 处理多用户更新数据并发问题 编程小实例,C++.net源代码编写 立即下载

相关推荐

汇川PLC和PLC之间ModebusTCP通讯

然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。

panjinliang066333的博客 3万+

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

拆解博世、大陆的EMB方案:自增力机构如何省下83%的能耗?

本文深度解析了博世和大陆的电子机械制动(EMB)技术,重点探讨了自增力机构如何实现83%的能耗节省。通过对比电机直驱型和自增力型EMB的技术参数,揭示了自增力机构在能量优化和系统集成方面的创新优势,为汽车电动化和智能化提供了关键技术支持。

weixin_42665725的博客 393

【深度避坑】Word 提示“内存或磁盘空间不足,保存失败”的真正原因与终极解决方案

这是 Word 2003 时代的老功能⚠现代 Office 使用全新的保存 API(与 OneDrive 深度集成)老插件无法兼容现代保存机制会拦截 Word 的写入流程导致保存动作失败,Word 误以为磁盘坏了,于是报错不是磁盘坏了,是 Word 被插件绊倒了。Word 无法保存 = 加载项冲突(尤其是书法 / 稿纸向导)。永久禁用即可彻底恢复。如果在写毕业论文、要交文档,强烈建议马上检查一下你的加载项,避免后期出现大规模崩溃丢稿。

m0_59029415的博客 3069

Cadence 中Cutout、Design_Outline 和 Outline的区别

摘要: 在PCB设计中,Cutout、Design_Outline和Outline都与电路板外形相关但用途不同。Cutout用于定义切割区域(如孔、槽),直接影响制造;Design_Outline仅标记设计边界,作为参考不影响切割;Outline则是实际切割轮廓层,用于制造。三者区别在于:Cutout针对具体切割区域,Design_Outline是设计参考,Outline是最终切割依据。设计时需根据需求选择合适层:外形参考用Design_Outline/Outline,切割区域用Cutout。

卤煮小鱼的博客 1789

【花雕学编程】Arduino FOC 之AS5048A磁编码器模块

您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。

雕爷学编程 1496

ABAP CDS 货币与计量单位换算全攻略:CURRENCY_CONVERSION、UNIT_CONVERSION 与 DECIMAL_SHIFT 的工程化实践

本文介绍了SAP ABAP CDS中三种单位/货币换算函数(UNIT_CONVERSION、CURRENCY_CONVERSION、DECIMAL_SHIFT)的实战应用。重点包括:各函数的职责边界与适用场景,参数配置与精度控制策略,以及基于标准表(T006、TCUR*等)的换算规则来源。文章提供可运行的CDS示例,涵盖单位换算(如MI转KM)、货币汇率转换(含小数位处理)及纯小数位调整等典型场景,并强调生产环境中需注意的精度差异与审计风险控制。适用于企业报表、成本核算等需要统一口径的业务场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1554

TC3XX - MCAL知识点(三):MCU EB-tresos配置说明及代码浅析

AURIX 2G Tc3xx的配置相较AURIX 1G Tc2xx来讲简化了许多,但是依赖于数据手册的理解来讲整个MCU功能做了较大增强,此处先简单的介绍一下,本文前期先补充介绍一下英飞凌手册的阅读规则,因为后面的文章会基于此文的一些缩写进行截图寄存器之类的。MCU在AUTOSAR架构里面的图示如下MCU驱动程序负责配置SCU、GTM、CCU6、GPT12和STM外设。驱动程序提供由AUTOSAR指定的运行时服务。

梦想技术家 2874

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 浅谈VB.NET文章系列之一 --通过例子,浅谈反射(Reflection)的应用
下一篇: 关于如何操作其他窗体的控件或变量的方法!
HanMo
博客等级 码龄26年 8粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值