三种事务处理
事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:
方法1:直接写入到sql 中
在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现
begin trans
declare @orderDetailsError int,@procuntError int
delete from [order details] where productid=42
select @orderDetailsError =@@error
delete from products where productid=42
select @procuntError=@@error
if(@orderDetailsError =0 and @procuntError=0)
COMMIT TRANS
else
ROLLBACK TRANS
优点:
所有事务逻辑包含在一个单独的调用中
拥有运行一个事务的最佳性能
独立于应用程序
限制:
事务上下文仅存在于数据库调用中
数据库代码与数据库系统有关
方法2 :使用ADO.NET 实现
使用ADO.NET 实现,使用这种方式的优点是可以在中间层来管理事务,当然你也可以选择在数据层来实现。
SqlConnection 和OleDbConnection 对象有一个 BeginTransaction 方法,它可以返回 SqlTransaction
或者OleDbTransaction 对象。而且这个对象有 Commit 和 Rollback 方法来管理事务
SqlConnection sqlConnection = new SqlConnection("workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False");
sqlConnection.Open();
SqlTransaction myTrans = sqlConnection.BeginTransaction();
SqlCommand sqlInsertCommand = new SqlCommand();
sqlInsertCommand.Connection = sqlConnection
sqlInsertCommand.Transaction=myTrans;
try{
sqlInsertCommand.CommandText="insert into tbTree(Context,ParentID) values('北京',1)";
sqlInsertCommand.ExecuteNonQuery();
sqlInsertCommand.CommandText="insert into tbTree(Context,ParentID) values('上海',1)";
sqlInsertCommand.ExecuteNonQuery();
myTrans.Commit();
}catch(Exception ex)
{
myTrans.Rollback();
}
finally
{
sqlConnection.Close();
}
优点:
简单性
和数据据事务差不多的快
独立于数据库,不同数据库的专有代码被隐藏了
缺点:
事务不能跨越多个数据库连接
事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接
ADO.NET分布事务也可以跨越多个数据库,但是其中一个SQL SERVER 数据库的话,通过用SQL SERVER连接服务器连接到别的数据库,但是如果是在DB2和Orcal之间就不可以。
以上两种事务是经常用到的事务处理方法。
方法3 COM+事务(分布式事务)
.NET Framework 依靠 MTS/COM+ 服务来支持自动事务。COM+ 使用 Microsoft Distributed Transaction Coordinator (DTC) 作为事务管理器和事务协调器在分布式环境中运行事务。
这样可使 .NET 应用程序运行跨多个资源结合不同操作(例如,将定单插入 SQL Server 数据库、将消息写入 Microsoft 消息队列 (MSMQ) 队列、以及从 Oracle 数据库检索数据)
的事务。
COM+事务处理的类必须继承System.EnterpriseServices.ServicedComponent,其实web service就是继承System.EnterpriseServices.ServicedComponent,所以web service也支持
COM+事务。
定义一个COM+事务处理的类
[Transaction(TransactionOption.Required)]
public class DataAccess:System.EnterpriseServices.ServicedComponent
{}
TransactionOption枚举类型支持5个COM+值(Disabled,NotSupported,Required,RequiresNew,Supported)
Disabled 忽略当前上下文中的任何事务。
NotSupported 使用非受控事务在上下文中创建组件。
Required 如果事务存在则共享事务,并且如有必要则创建新事务。
RequiresNew 使用新事务创建组件,而与当前上下文的状态无关。
Supported 如果事务存在,则共享该事务。
一般来说COM+中的组件需要Required 或Supported。当组件用于记录或查帐时RequiresNew 很有用,因为组件应该与活动中其他事务处理的提交或回滚隔离开来。
派生类可以重载基类的任意属性。如DataAccess选用Required,派生类仍然可以重载并指定RequiresNew或其他值。
COM+事务有手动处理和自动处理,自动处理就是在所需要自动处理的方法前加上[AutoComplete],根据方法的正常或抛出异常决定提交或回滚。
手动处理就是调用ContextUtil类中EnableCommit,SetComplete,SetAbort方法。
public string testTransaction()
{
try
{
ContextUtil.EnableCommit();
InsertARecord1();
InsertARecord2();
ContextUtil.SetComplete();
return "succeed!";
}
catch(Exception ex)
{
ContextUtil.SetAbort();
return "failed!";
}}
public void InsertARecord1()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('北京',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
public void InsertARecord2()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('上海',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
在需要事务跨 MSMQ 和其他可识别事务的资源(例如,SQL Server 数据库)运行的系统中,只能使用 DTC 或 COM+ 事务,除此之外没有其他选择。DTC 协调参与分布式事务的所有资源管理器,
也管理与事务相关的操作。
这种做法的缺点是,由于存在 DTC 和 COM 互操作性开销,导致性能降低。
COM+事务处理的类必须强命名。
相关推荐
【rt-thread实战解析】从零到一:基于STM32与LAN8720A的以太网驱动配置全流程
本文详细解析了在RT-Thread操作系统上为STM32F407配置LAN8720A以太网驱动的全流程。从硬件连接自查、CubeMX工程创建、PHY复位函数编写,到RT-Thread工程配置、LwIP协议栈集成,最后进行实际上电测试与网络调试,手把手指导开发者避开常见陷阱,实现稳定的以太网连接。
事务处理的三种方法
事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下: 方法1:直接写入到sql 中 在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现 BEGIN TRANS declare @orderDetailsError int,@procuntError int delete from [order det
实战|基于Kappa架构的用户行为实时分析平台搭建教程
数据源:用Kafka存储全量数据(实时+历史),作为“事实来源”;处理引擎:用Flink等流处理引擎,读取Kafka中的数据,执行清洗、转换、聚合等操作;存储层:将处理结果写入实时存储(如Elasticsearch)或批量存储(如Hive);消费层:用可视化工具(如Kibana)展示结果,或提供API供业务系统调用。Kappa架构的关键设计原则全量数据存于Kafka:Kafka的“无限 retention”特性(默认保留7天,可配置更长)让它成为全量数据的存储介质;用流处理引擎处理所有数据。
事务处理的三种策略
经典的事务处理策略主要有三种。 乐观并发控制策略(Optimistic Concurrency Control,OCC) 从事务开始,每一项操作都允许进行,但在事务提交的时刻,需要进行隔离性和完整性约束检查,如果有违反相关约束的行为则终止事务。单机事务处理模型很少使用乐观并发控制策略。 使用这种策略的分布式数据库有Percolator、CockroachDB等。 悲观并发控制策略(Pessimistic Concurrency Control,PCC) 从事务开始就检查每一项操作是否会违反隔离性和完整性约束
【软考高级架构】论文范文12——论生成式AI在软件开发中的应用与挑战
随着生成式AI技术的跨越式发展,以大语言模型为代表的生成式AI正在深刻改变软件开发的传统模式。在代码生成、测试构造、文档编写等环节,生成式AI展现出显著的效率提升潜力,但其应用也面临着代码质量不可控、安全漏洞植入、版权合规等严峻挑战。本文以笔者主导的某大型金融企业智能研发辅助平台建设项目为案例,围绕生成式AI在软件开发中的应用实践与应对挑战的策略展开论述。笔者担任系统架构师,负责平台架构设计、模型选型、质量保障机制及安全防线构建。
华为od 面试八股文_测试/测试开发_01_含答案
华为od面试八股文_测试/测试开发_01_含答案
事务的三种类型
事务:有三种类型: 1、JDBC事务 2、JTA事务(java Transaction API)事务 3、容器事务 1、JDBC事务是用Connection对象控制的,JDBC Connection接口(java.sql.connection)提供了两种事务模式:自动提交和手动提交。 public void setAutocommited(boolean) public boolean getAu...
时间序列预测 — 预测数据集(负荷、风电、光伏、销量等)
GEFCom2014 “负荷预测数据”为竞赛的公共数据集,GEFCom2014 的负荷预测轨迹为概率负荷预测。
JAVA—事务处理三种方式:Thread,Runnable,Callable
JAVA—事务处理三种方式: 1.Thread 说明:Thread 类中包含run方法,通过改写run方法,然后实例化Thread 类,执行事务。 代码实现 public class Threadnew { public static void main(String[] args) { //1.2匿名实例化类继承MyThread类,并且启动 new MyThread().start(); } } //1.1自定义继承MyThread类继
基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计
它具有低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。#define ICP20100_FIFO_CTRL 0x09 // FIFO控制寄存器。#define ICP20100_FIFO_DATA 0x0A // FIFO数据寄存器。#define ICP20100_FIFO_STS 0x0B // FIFO状态寄存器。#define ICP20100_FIFO_WTM 0x15 // FIFO水印设置。
梯度提升决策树GBDT原理与代码实例讲解
梯度提升决策树GBDT原理与代码实例讲解 1.背景介绍 1.1 机器学习发展历程 机器学习是人工智能领域的一个重要分支,旨在使计算机具备学习和改进自身性能的能力。随着大数据时代的到来,海量的数据为机器学习算法提供了广阔的应用空间。在
事务方法调用事务方法_实现系统调用的几种方法
本文,我们将讨论在x86上实现用户到内核转换的许多方法,即系统调用。让我们首先快速回顾一下实际需要完成哪些系统调用。在现代操作系统中,用户模式(执行普通应用程序代码)和内核模式(能够接触系统配置和设备)是有区别的。系统调用是应用程序从操作系统内核请求服务并弥合它们之间差距的一种方法。为了实现这一点,CPU需要为应用程序提供一种机制,使其能够安全地从用户模式转换到内核模式。所以在这样的运行...
《手把手教你YOLOv9实战》,改进专栏目录
为了提供友好的操作效果,本专栏将会手把手搭建可视化界面,我将用PyQt5 搭建一个可视化界面,可视化界面能够实现基本的图像加载与检测功能,如支持视频、摄像头,还支持更换不同的 YOLOv9 模型,并适应不同领域(如口罩检测系统、人脸检测系统、工业缺陷检测系统等),界面灵活、功能强大。通过YOLOv9加以改进设计,形成新的算法框架,一起水科研和论文,专栏会一直持续更新中,本专栏适合目标检测、分割、分类。
事务处理三种的三种方法
三种事务处理事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现 begin transdeclare @orderDetailsError int,@procuntError intdelete from [order details] w
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
三种事务处理方式比较
三种事务处理事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现 begin transdeclare @orderDetailsError int,@procuntError intdelete from [order detai
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
ASP.NET三种事务处理
三种事务处理作者:相思豆 日期:2005-08-16字体大小: 小 中 大 三种事务处理事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现 begin transdeclare @orderDetailsError
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
TensorFlow/Keras实现混合密度网络MDN:从点估计到分布估计的回归实战
在机器学习回归任务中,传统MSE损失通常只能输出点估计,难以处理多峰分布或一对多映射的数据。混合密度网络(MDN)通过让神经网络输出多个高斯分布的混合参数,将回归问题从点估计升级为分布估计,从而捕捉数据的多模态特性与不确定性。其核心原理是利用负对数似然损失训练网络,并借助对数求和指数技巧保证数值稳定。在TensorFlow/Keras中实现MDN,需自定义输出层拆分混合权重、均值和对数方差,并采用自定义训练循环。该技术适用于数据多峰、同一输入对应多个合理输出等场景,为复杂分布建模提供了工程实践方案。
javaScript代码:三种事务处理方法对比
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head><body> <div id="div"> <button id="btn1" onclick="demo()">按钮</button> </div> <!-- <script>
.NET三种事务处理详解
体系结构:SQL事务处理、ADO.NET事务处理、COM+事务处理 数据库事务处理:T-SQL语句中完成, Begin Transaction Commit/Roll Back BEGIN TRANSACTION: BEGIN TRANSACTION { tran_name} {trans_name1| @tran_name-veriable1...
Linq To Sql : 三种事务处理方式
Linq To SQL支持三种事务处理模型:显式本地事务、显式可分发事务、隐式事务。 1.显式本地事务 SubmitChanges只能处理最基本的CUD(Create/Update/Delete)操作;而在日常的应用中,逻辑往往没有这么简单,或者考虑性能等因素,我们需要配合ADO.Net执行原生的TSQL;这时我们可能要让ADO.Net+ Linq to SQL来进行配合处理。 代码: publ...
asp.net三种事务处理
三种事务处理事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现begin transdeclare @orderDetailsError int,@procuntError intdelete from [order details] wh...
Linq to Sql : 三种事务处理方式
Linq to SQL支持三种事务处理模型:显式本地事务、显式可分发事务、隐式事务。(from MSDN:事务 (LINQ to SQL))。MSDN中描述得相对比较粗狂,下面就结合实例来对此进行阐述。 0. 测试环境 OS Windows Server 2008 Enterprise + sp1 IDE Visual Studio 2008, .net f...
525



被折叠的 条评论
为什么被折叠?



