在C#中使用事务

文章目录

  • 一、概述
    • 1、事务ACID特性
    • 2、.NET开发者用到的5种事务机制:
  • 二、数据库事务
    • 1、不同数据库的事务规则
    • 2、数据库事务的优势和限制
  • 三、ADO.Net事务
  • 四、System.EnterpriseServices自动事务处理
  • 五、System.Transactions事务
    • 1、显式事务(Explicit Transaction)
    • 2、Transaction类的派生类
    • 3、Transaction类成员
  • 六、可提交的事务:CommitableTransaction(显式事务)
  • 七、环境事务:TrasactionScope(隐式事务,推荐)
    • 1、隔离级别IsolationLevel
    • 2、嵌套环境事务
    • 3、TransactionScopeOption
    • 4、MSDTC组件设置:
  • 八、依赖事务DependentTransaction,跨多个线程调用事务(显式事务)


一、概述

1、事务ACID特性

事务将一系列的工作视为一个工作单元,它具有 ACID 特性:

A:Atomicity 不可分性
也就是说事务中有多项工作,如果有一项工作失败了,整个事务就算失败了。
C:Consistency 一致性
事务完成时,全部数据必须维持一致性的状态。对于关系数据库,简单地来说就是没有破坏数据完整性。
I:Isolation 隔离性
事务与其他事务是隔离的,也就是说一个事务的一项工作对数据进行修改时,如果整个事务还没有结束,其他事务就无法知道这个数据发生了修改。
D:Durability 持久性
事务完成后,其作用便永远存在于系统之中。

2、.NET开发者用到的5种事务机制:

SQL和存储过程级别的事务。(数据库事务)
ADO.NET级别的事务。
ASP.NET页面级别的事务。
企业级服务COM+事务。
System.Transactions 事务处理。
这5种事务机制有着各自的优势和劣势,分别表现在性能、代码数量和部署设置等方面。开发人员可以根据项目的实际情况选择相应的事务机制。

二、数据库事务

1、不同数据库的事务规则

数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规则。

SQL Server默认在自动提交的模式下工作,每个语句执行完后都会立即提交;
Oracle则需要你包含一个提交语句。
当一个语句通过OLE DB执行时,它执行完后一个提交动作会被附加上去。
例如:SQL Server数据库T-SQL语句中显示指定事务

declare @TranName varchar(20);
select @TranName = 'MyTransaction';begin transaction @TranName;
gouse AdventureWorks;
godelete from AdventureWorks.HumanResources.JobCandidate where JobCandidateID = 13;
gocommit transaction MyTransaction;
go

或在存储过程中使用

create procedure Tran1
asbegin tran;set xact_abort on; --set xact_abort on表示遇到错误立即回滚。insert into P_Category ( CategoryId, Name ) values ( '1', 'test1' );insert into P_Category ( CategoryId, Name ) values ( '2', 'test2' );commit tran;
go

2、数据库事务的优势和限制

(1)优势:
所有的事务逻辑包含在一个单独的调用中。
拥有运行一个事务的最佳性能。
独立于应用程序。

(2)限制:
事务上下文仅存在于数据库调用中。
数据库代码与数据库系统有关。

三、ADO.Net事务

ADO.Net事务为System.Data.Common.DbTransaction类的各种派生类。ADO.Net事务不是分布式事务,不支持跨多个连接,它总是关联到一个连接上的本地事务上。

ADO.NET 显式事务占用资源少、速度快,但功能简单,只能管理单一对象和单一持久资源间的事务。

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySqlServer"].ConnectionString))
{conn.Open();using (SqlTransaction tran = conn.BeginTransaction()){using (SqlCommand cmd = new SqlCommand()){cmd.Connection = conn;cmd.Transaction = tran;cmd.CommandType = CommandType.Text;try{cmd.CommandText = "insert into TranTable(Priority) values(1)";cmd.ExecuteNonQuery();cmd.CommandText = "insert into TranTable(Priority) values(256)";cmd.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)

数据库管理213期 2024-06-25 数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)1 索引1.1 B-Tree索引1.2 Hash索引1.3 复合索引1.4 唯一索引1.5 表达式索引1.6 部分索引 2 视图3 表连接3.1 内连接3.2 左/右外连接3.3 全连接清理环境: …

Linux内核测试技术

Linux 内核是Linux操作系统的核心部分,负责管理硬件资源和提供系统调用接口。随着 Linux 内核的不断发展和更新,其复杂性和代码规模也在不断增加。因此,确保内核的稳定性和可靠性变得尤为重要。内核测试技术是实现这一目标的关键手段。本文将…

css中定义鼠标指针样式的属性cursor

在CSS中,cursor 属性用于定义鼠标指针在元素上移动时的样式。它允许你改变默认的鼠标指针样式,以提供关于用户可以进行哪些操作的视觉反馈。 以下是cursor属性的一些常见值和用法: 默认值:auto 这是大多数元素的默认设置。浏览器…

学懂C#编程:常用高级技术——学会C#多线程开发(一)

多线程基本概念 在C#中,多线程允许你同时执行多个代码路径。每个线程代表一个独立的执行流,操作系统可以在不同的处理器核心上并行执行这些线程,或者在单个核心上通过时间分片来模拟并行执行。 关键概念: Thread:代…

iptables配置NAT实现端口转发

加载防火墙的内核模块 modprobe ip_tables modprobe ip_nat_ftp modprobe ip_conntrack 1.开启路由转发功能 echo net.ipv4.ip_forward 1 >> /etc/sysctl.conf sysctl -p2、将本地的端口转发到本机端口 将本机的 7777 端口转发到 6666 端口。 iptables -t nat -A PR…

面试题:HTTP的body是二进制还是文本

实际上,HTTP的body可以是二进制数据,也可以是文本。HTTP协议本身不对body内容的格式做限制,具体格式取决于Content-Type头字段的定义。 文本数据: 当Content-Type头字段指定为文本类型时(如text/plain、text/html、ap…

C# Winform 开源UI库

WinForms,作为微软.NET框架下的一个桌面应用程序开发工具,自1999年首次亮相以来,已经走过了二十多年的发展历程。它以其简单直观的拖拽式界面设计和丰富的控件库,成为了大众喜爱的入门学习编程工具。由于它是比较基础的开发工具&a…

技术发展下的前端功能扩展与后端计算压力的减少

随着Web技术的迅猛发展,越来越多的计算和数据处理功能正逐渐从后端转移到前端。这一转变不仅提升了用户体验,还显著减少了后端服务器的计算压力。本文将探讨这一趋势的背景、技术实现及其带来的优势和挑战。 技术发展背景 传统的Web应用架构以服务器为…

Windows下如何实现微信多开/分身

新建文本文档 把下面的脚本复制到文本文档中 echo offstart "" "C:\Program Files\Tencent\WeChat\WeChat.exe" start "" "C:\Program Files\Tencent\WeChat\WeChat.exe"exit把wechat.exe的路径替换成你自已的路径 想多开几个就复制…

如何写好AI绘画提示词?保姆级教程来了!

前言 提示词编辑是一个结构化的过程,用能被人类解释和理解的词语来描述图像,也就是告诉人工智能模型应该怎么绘制图片。 生成优质图像的秘诀 1.提示词要想编辑好,包括修饰词和好的句子结构,首先你要了解所有的修饰词类型。 2.St…

探索Perl中哈希的奥秘:创建与使用指南

探索Perl中哈希的奥秘:创建与使用指南 引言 Perl,这门被誉为“程序员的瑞士军刀”的语言,以其在文本处理和系统管理中的卓越性能而闻名。在Perl的世界里,哈希(Hash)扮演着至关重要的角色,它提…

SAP的RFID

射频识别 (RFID) 避免了条码扫描的局限性,条码扫描需要对每个条码进行视线访问,并且一次只能用于扫描一个项目。 一次扫描一个标签可能会令人厌烦和压力大,这会增加人为错误的机会。相反,RFID 标签不需要直…

紧贴国家大战略需求,聚焦当前行业热点-海云安D10入选第四届香蜜湖金融科技创新奖拟奖项目

近日,第四届香蜜湖金融科技创新奖终审总结会在深圳市福田区湾区国际金融科技城成功举办,活动现场,专家评审委员会最终揭晓25个拟奖项目。海云安“开发者安全助手系统”项目,实力入选第四届香蜜湖金融科技创新奖-优秀项目奖。 1、香…

关于导入springcloud项目一些jar加载不进去的问题处理

IntelliJ IDEA的Maven项目有时候通过右边Maven Projects面板的package或者install命令打包的时候,会报错导致打包失败,这是由于这两个命令打包前默认会运行tests测试,若测试失败则打包失败。但是有时候我们打包的时候一些项目配置是针对生产环…

如何解决远距离传输大文件慢的问题?

在数字化时代,无论是企业还是个人,经常需要处理跨越长距离的大规模文件传输任务。这种传输的效率和安全性对业务流程的顺畅至关重要。然而,我们经常遇到网络延迟、数据丢失、带宽限制等问题,这些都可能影响文件传输的效率。小编将…

PreparedStatement和Statement的区别是什么

PreparedStatement和Statement都是Java中用于执行SQL语句的接口,但它们之间存在显著的差异。以下是关于这两个接口的主要区别: 安全性和SQL注入: PreparedStatement:它是安全的,因为它支持参数化查询,即使…

从传统到智能:视频汇聚EasyCVR+AI视频监控如何助力仓储的智能化转型

随着物流行业的快速发展和市场竞争的加剧,仓储管理对于保证货物安全、提高运营效率显得尤为重要。传统的仓储监控方式已难以满足现代仓储管理的需求,因此,仓储视频智能监控解决方案应运而生。方案通过集成先进的视频监控技术、智能分析算法、…

HBDNY-40/1端子排电压继电器 DC110V 导轨安装 约瑟JOSEF

HBDNY系列端子排型电压电流继电器 系列型号:(3、4过/低电压型,5、6过/低电流型) HBDNY-30/1端子排型电压继电器;HBDNY-30/2端子排型电压继电器; HBDNY-30/3端子排型电压继电器;HBDNY-30/4端子…

Java 面试笔记 | Java 基础:线程池

前言 在日常的工作学习生活中,用一种好的方法去学习,可以更加有效,比如费曼学习法:将学到的知识用自己的组织的语言表达出来,如果能够清晰明白的向别人解释清楚,那么就说明你是真的懂了,学会了…