asp.net事务机制

2021-07-01 .NET高级班 82-ASP.NET Core RabbitMQ的确认机制 一:首先安装包 nuget引入程序集:RabbitMQ.Client 1.生产者确认 public class ProductionMessageConfirm { public static void Send() { ConnectionFactory factory = new ConnectionFactory(); factory.HostName = "localhost";//RabbitMQ服务在本地运行 factory.Us. 阅读详情

本文摘自:http://www.cnblogs.com/zhangxj-sun/archive/2012/07/13/Tran.html

1.SQL和存储过程级别的事务
  这个也是我经常用到的事务,其实这个可以用一个很简单的例子来形容就是银行取钱的问题,两个不同地方的存折但是是同一个账户,当其中一个地方的存折发生改变另外一个地方的存折数据也会跟着发生改变,存储过程实例:

CREATE PROCEDURE TRAN1
AS
BEGIN TRAN
 SET xact_abort on
  UPDATE 账户 set 金额=100 WHERE 帐号='帐号'
  UPDATE 账户 set 金额=100 WHERE 帐号='帐号'
 commit tran
GO

2.ADO.NET 级别的事务

这个就是我们在创建访问数据库的DBHelper类中经常使用的,如

View Code
复制代码
/// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>        
        public static void ExecuteSqlTran(ArrayList SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection=conn;                
                SqlTransaction tx=conn.BeginTransaction();            
                cmd.Transaction=tx;                
                try
                {           
                    for(int n=0;n<SQLStringList.Count;n++)
                    {
                        string strsql=SQLStringList[n].ToString();
                        if (strsql.Trim().Length>1)
                        {
                            cmd.CommandText=strsql;
                            cmd.ExecuteNonQuery();
                        }
                    }                                        
                    tx.Commit();                    
                }
                catch(System.Data.SqlClient.SqlException E)
                {        
                    tx.Rollback();
                    MyLog.logger.Error("执行多条SQL处理事务错误信息:" + E.Message);
                }
            }
        }
复制代码

3.asp.net 页面级别的事务
首先在页面做事务设置,使用Transaction="Required":
<%@ Page Transaction="Required" Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
然后在后台中使用ContextUtil.SetComplete();提交事务ContextUtil.SetAbort();取消事务,

try
        {
            //完成的第一个任务
            TaskWork1();
            //完成的第二个任务
            TaskWork2();
            //提交事务
            ContextUtil.SetComplete();
        }
        catch(Exception ex)
        {
            //如果出现一场则回滚
            ContextUtil.SetAbort();
            Response.Write(ex.Message);
        }

4.企业级服务COM+ 事务
  这个使用机制我是第一次使用,我仅在项目中做了一个测试,但是还是没有正式的使用过,对于我这个菜鸟来说可能在技术上还差的很多。使用方式是这样:
1)首先引用:using System.EnterpriseServices;如果在见类库时不能引入可以先导入System.EnterpriseServices这个dll文件
2)让类继承ServicedComponent
3)在类头部加[Transaction(TransactionOption.Required)]
4)给程序添加强名
   1.创建密钥 sn-k c:\key.snk 这个密钥文件用于对DLL进行签名,这个key.snk的文件创建需要在目录下找到sn.exe这个应该是在安装vs的时候自带的一个工具吧我找到的它的目录是在C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin 可以把这个文件拷出来放在一个方便使用的目录。把生成的key.snk文件放入项目中。
   2.在AssemblyInfo.cs引入[assembly: AssemblyKeyFile("..\\key.snk")]
5)手动事务处理

/// <summary>
        /// 手动处理事务
        /// </summary>
        /// <returns></returns>
        public string DoTran()
        {
            try
            {
                ContextUtil.EnableCommit();
                DoWork();
                DoWork();
                ContextUtil.SetComplete();
                return "方法执行成功";
            }
            catch (Exception)
            {
                ContextUtil.SetAbort();
                return "两个方法至少有一个执行失败!";
            }
        }
6)自动处理事务在方法上加入
 [AutoComplete(true)]
        private void DoWork()
        {
            //解决问题的方法
        }
这种形式是不是很麻烦,而且性能很低
5.System.Transactions 事务处理 (需要引入System.Transactions这个DLL文件)
 public void UseTransactions()
        {
            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    //处理问题的方法

                }
                catch (Exception)
                {
                    
                    throw;
                }
                ts.Complete();

            }
        }
这种方式非常强大还可以同时连接两个数据库
 public void UseTransactions()
        {
            using (TransactionScope ts = new TransactionScope())
            {
                using (SqlConnection conn = new SqlConnection(strCon))
                {
                    using (SqlConnection conn1 = new SqlConnection(strCon1))
                    {

                    }
                }
                ts.Complete();

            }
        }
其实还有很多别的强大的功能,我在项目中没有用到过所以也没有仔细的研究。还有一个比较有用的是可以控制在操作失败后仍然执行一个操作然后再次进入事务中,如:如果我们需要在失败后生成一个失败的日志这种就比较实用了使用方式
using (TransactionScope ts = new TransactionScope())
            {
 using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Suppress))
            {
//不受事务控制
}
//受事务控制区域
}

深入探究ASP.NET三层架构的经典实现 ASP.NET三层架构是一种分层的设计模式,广泛应用于Web应用程序开发中。它的核心思想是将应用程序分为三个逻辑层:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层方式不仅有助于提升代码的组织结构,还便于实现模块化开发,使得各层之间的耦合度降低,便于维护和扩展。在本章中,我们将简要介绍三层架构的由来和其基本理念,并探讨为何它能够成为一种经久不衰的设计模式。随后,我们将进入更具体的层实现细节,探讨如何在ASP.NET环境中应用三层架构,并考虑在具体实现时应遵循的最佳实践和原则。 阅读详情

相关推荐

微软官方帮助类SqlHelper

微软ASP.NET中使用SQL Server的基于C#的帮助类,可根据需求调用其中的服务

在Asp.Net中的几种事务处理的方法

数据库层事务:效果最佳 CREATE PROCEDURE dbo.SPTransaction ( @UpdateID int, @UpdateValue nchar(50), @InsertID int, @InsertValue nchar(50) )ASbegin TranUpdate Region Set RegionDescription=@Up...

weixin_30618985的博客 512

MTK手机传感器驱动开发避坑指南:从SCP代码大小限制到Overlay加载流程详解

本文详细解析了MTK平台传感器驱动开发中的常见问题,包括SCP代码大小限制、Overlay加载流程及客制化传感器集成。通过实战案例和优化策略,帮助开发者高效解决MTK传感器驱动开发中的技术难题,提升开发效率。

weixin_42522374的博客 401

asp.net中的4种事务

在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务逻辑有只要一步执行就可以完成了。因此掌握事务处理的方法是很重要,进我的归类在.net中大致有以下4种事务处理的方法。大家可以参考一下,根据实际选择适当的事务处理。 1 SQL事务     sql事务是使用SQL server自身的事务:在存储过程中直接使用Begin Tran,Rollback

chy2z的专栏 548

vscode中使用PlatformIO创建工程加载慢

解决使用VSCODE+PlatformIO中,第一次新建工程一直加载的问题

Reasally的博客 4973

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

ASP.NET里的事务处理

事务是一组组合成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。如果在事务过程中没有遇到错误,事务中的所有修改都将永久成为数据库的一部分。如果遇到错误,则不会对数据库作出任何修改。   例如,在一个银行应用程序中,如果资金从一个帐户转到另一个帐户,则会将一定的金额记入一个帐户的贷方,同时将相同的金额记入另一个帐户的借方。由于计算机可能会因为停电

江湖·郎中·路 1342

KAN神经网络实战:如何用Python快速搭建你的第一个可解释性模型

本文提供了使用Python和PyTorch快速搭建首个KAN(Kolmogorov-Arnold Networks)神经网络模型的实战指南。通过对比传统MLP,详细解析了KAN利用可学习的边函数实现更高可解释性的核心原理,并逐步演示了从环境配置、数据准备、核心模块实现到模型训练与可视化的完整流程,帮助开发者掌握这一新兴的可解释性AI模型构建方法。

convnet3designer的博客 473

ASP.NET 3.5(C#)系列3-新一代事务机制

事物这个概念已经接触过。在旧的ADO.NET事务机制中,我们需要这样做: SqlConnection conn = new SqlConnection(); conn.Open(); SqlTransaction tran = conn.BeginTransaction(); //显示声明开始建立事物Transaction string sqlString ="xxxxxx"; SqlCommand cmd =

学无止境! 1520

【STM32】STM32F103C8T6多串口通信实战:3个USART并行收发与中断处理优化

本文详细介绍了STM32F103C8T6多串口通信的实战技巧,包括3个USART模块的并行配置、中断优先级优化及数据收发冲突规避策略。通过硬件初始化步骤、中断优先级设置和双缓冲区实现等方案,有效解决了多串口通信中的数据错乱问题,提升系统稳定性与效率。

weixin_42526417的博客 168

第四篇:关于python程序打包的问题-找不到fsspec

这个问题困扰了我将近两天的时间一直找不到什么好的办法,甚至打算放弃。主要原因是身边没有可以述说的人,也没有可以请教的人。正在想要放弃的时候找到了解决办法。 打包后运行程序是这样的, 大概意思是找不见fsspec这个依赖,刚接触python说实话对于这些第三方库理解不是很到位,我的理解就是:类似于java程序中的jar包,程序找不见了。可怎么让他找见了,刚开始以为我自己没有安装fsspec,在cmd中进行了安装,结果如下图所示 很明显,已经安装并且安装目录都有,跟着网上的一些解决办法,在打包的时候把这.

weixin_47861710的博客 5865

数据库开发之【ASP.NET页面级别的事务】

电话

学过印刷包装工程研究过食品科学且会点计算机编程的多功能码农 845

从0到1,快速理清 | DeepSeek Harness

DeepSeek推出自研Harness开发平台,主打"一切皆插件"理念,将AI执行能力模块化为可自由组合的插件体系。带你从0到1,快速了解开发链路。

IT学习博客 675

asp.net 使用事务机制

using (System.Data.Common.DbTransaction traction = context.Connection.BeginTransaction()) { try { SRC_DEF_BASELI...

weixin_30367873的博客 81

微信小程序 - 获取用户头像昵称等信息(带授权检测)

前言 接口调整官方文档:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01 在以前,是否授权可以直接弹出询问用户,但现在微信更改了策略,必须由用户点击按钮触发。下面将用代码来实现用户授权及获取用户信息。 功能介绍 无论确认授权还是拒绝授权,都会跳转对应页面,不让用户卡在界面。 点击授权后,下次不在出现授权页面了,如果拒绝,下次依然出现。 以下代码可直接复制粘贴,具体功能如下:

🏆 前端领域优质创作者 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ASP.NET 3.5(C#)系列3-新一代事务机制II-并发事务级别

<br />事务的并发在事物中有着重要作用,在System.Transaction中针对事务的并发提供了管理操作,常用有以下4种。<br /> <br />Serializable(默认)可读数据,无法修改,也无法加入新数据。<br />RepeatableRead可读数据,无法修改,但可以加入新数据。<br />ReadCommitted无法读取数据,但可以修改。<br />ReadUncommitted可以读取和修改数据。<br /> <br />显示事务中建立事物级别:<br />Transactio

学无止境! 1253

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

asp.net mysql 事务_asp.net 数据库连接 使用事务处理(一)

在.net中,事务处理机制共有四种:数据库事务;ADO.NET事务;ASP.NET事务;企业服务及事务。ASP.NET事务是在Web应用程序的页面层工作,只需简单的在页面属性中加一个"Transaction="Required"",这样页面中的时间处理都作为页面整个事务的 一部分,该页面的任何处理出现问题,所以的处理都会回滚。为了执行一个ADO.NET事务,首先需要创建一个SqlTransacti...

weixin_39647180的博客 246

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

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

用Microsoft.net实现数据库事务(一)

用Microsoft.net实现数据库事务&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt; 摘要:了解.net的Pet Shop 2企业版本是怎样帮助企业解决实际中的业务问题,Net Pet Shop 验证了怎样利用.net框架和Visual Studio.net来开发最佳的...

爱.NET 171

ASP.NET Core自动事务ActionFilter

ActionFilter是用于在控制器动作执行前后插入逻辑的,要实现自动事务,应该是在OnActionExecuting开始事务,在OnActionExecuted根据结果提交或回滚。通过此方案,开发者可以灵活控制事务的启用和配置,同时保持代码简洁性和数据一致性。

lei1083929965的博客 1398

asp.net 数据库连接 使用事务处理(一)

在.net中,事务处理机制共有四种:数据库事务;ADO.NET事务;ASP.NET事务;企业服务及事务。 ASP.NET事务是在Web应用程序的页面层工作,只需简单的在页面属性中加一个"Transaction="Required"",这样页面中的时间处理都作为页面整个事务的 一部分,该页面的任何处理出现问题,所以的处理都会回滚。   为了执行一个ADO.NET事务,首先需要...

weixin_30731287的博客 166

.net事务机制

事务的ACID属性: 原则性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) .net开发者可以使用一下午中事务机制: SQL和存储过程级别的事务 优势:所有事务逻辑包含在一个单独调用中;拥有运行一个事务的最佳性能;独立于应用程序 限制:事务上下文仅存在于数据库调用中;数据库代码与数据库系统有关 ADO....

weixin_30546933的博客 96

ASP.NET Core工作单元:事务管理模式

在现代企业级应用开发中,数据一致性和事务管理是至关重要的核心需求。ASP.NET Core提供了多种事务管理模式,从简单的数据库事务到复杂的分布式事务,为开发者提供了灵活而强大的工具来确保数据操作的原子性和一致性。 本文将深入探讨ASP.NET Core中的工作单元(Unit of Work)模式和事务管理策略,帮助您构建健壮、可靠的应用程序。 ## 事务管理基础 ### 数据库事务的核心概...

gitblog_00311的博客 889

.NET 几种事务机制

事务是一组组合成逻辑工作单元的数据库操作,在系统执行过程中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。事务处理的主要特征是,任务要么全部完成,要么都不完成。在写入一些记录时,要么写入所有记录,要么什么都不写入。如果在写入一个记录时出现了一个失败,那么在事务处理中已写入的其他数据就会回滚。事务可能由很多单个任务构成。 简单事务的一个常见例子:把钱从A账户转到B账...

weixin_34179968的博客 228

.NET开发中的事务处理大比拼 之 ASP.NET页面级别的事务

事务是一组组合成逻辑工作单元的数据库操作,在系统执行过程中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。事务处理的主要特征是,任务要么全部完成,要么都不完成。在写入一些记录时,要么写入所有记录,要么什么都不写入。如果在写入一个记录时出现了一个失败,那么在事务处理中已写入的其他数据就会回滚。事务可能由很多单个任务构成。简单事务的一个常见例子:把钱从A账户转到B账户,这涉及两项任务,即

faunjoe的专栏 580
上一篇: 公司的Java框架应具备的通用功能
下一篇: 一键ghost(1key ghost)更改备份路径的方法
VS_URL
博客等级 码龄15年 12粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值