随笔 - 1330  文章 - 1  评论 - 378  阅读 - 482万 

 

事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下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之间就不可以。
以上两种事务是经常用到的事务处理方法。

posted on   钱途无梁  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示