【C#】简单聊下Framework框架下的事务
框架用的多了,之前版本的事务都忘记了。本次简单聊下.net framework 4.8框架下本身的事务
目录
- 1、SqlClient
- 2、TransactionScope
- 3、引用
1、SqlClient
在 C# 中,使用 using 块可以方便地实现对资源的自动释放,但它不适用于实现事务处理。为了在 C# 中实现事务,在关系型数据库中,你可以使用 ADO.NET 类库中的事务机制。
例如,如果你正在使用 SQL Server 数据库,可以使用 SqlTransaction 类来执行事务操作。以下是一个示例,演示如何在 C# 中使用 SqlTransaction 类来执行事务:
using System.Data.SqlClient;public class Program
{public static void Main(){string connectionString = "your_connection_string";using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();// 开始事务SqlTransaction transaction = connection.BeginTransaction();try{// 执行数据库操作using (SqlCommand command = connection.CreateCommand()){command.Transaction = transaction;command.CommandText = "INSERT INTO YourTable (Column1, Column2) VALUES (@Value1, @Value2)";command.Parameters.AddWithValue("@Value1", "Value 1");command.Parameters.AddWithValue("@Value2", "Value 2");command.ExecuteNonQuery();}// 提交事务transaction.Commit();}catch (Exception ex){// 回滚事务transaction.Rollback();Console.WriteLine("Transaction failed: " + ex.Message);}}}
}
在上面的示例中,我们使用 SqlConnection 来创建一个数据库连接,并通过 BeginTransaction 方法创建一个事务。然后,我们可以在事务中执行数据库操作,如果操作成功,可以调用 Commit 方法提交事务;如果操作发生异常,可以调用 Rollback 方法回滚事务。
请注意,上述示例仅用于演示事务处理的基本概念,实际数据库和操作的情况可能有所不同。你需要根据自己的数据库类型和操作进行相应的调整。
2、TransactionScope
在 C# 中,在操作数据库时,使用 using 语句块来创建事务是不可行的,因为 using 语句块会自动处理资源的释放,而事务需要在事务完成之前持续存在。
为了实现独立的事务作用域,你可以使用 TransactionScope 类来管理事务。TransactionScope 类提供了一种简单的方式来处理事务,它在代码块内自动处理事务的提交或回滚,做到了事务的嵌套和分布式事务的支持。
以下是一个示例,演示如何在 C# 中使用 TransactionScope 来实现独立的事务处理:
using System;
using System.Data.SqlClient;
using System.Transactions;public class Program
{public static void Main(){string connectionString = "your_connection_string";using (TransactionScope scope = new TransactionScope()){try{using (SqlConnection connection1 = new SqlConnection(connectionString)){connection1.Open();// 在第一个连接上执行数据库操作using (SqlCommand command1 = connection1.CreateCommand()){command1.CommandText = "INSERT INTO Table1 (Column1, Column2) VALUES (@Value1, @Value2)";command1.Parameters.AddWithValue("@Value1", "Value 1");command1.Parameters.AddWithValue("@Value2", "Value 2");command1.ExecuteNonQuery();}}using (SqlConnection connection2 = new SqlConnection(connectionString)){connection2.Open();// 在第二个连接上执行数据库操作using (SqlCommand command2 = connection2.CreateCommand()){command2.CommandText = "INSERT INTO Table2 (Column1, Column2) VALUES (@Value1, @Value2)";command2.Parameters.AddWithValue("@Value1", "Value 1");command2.Parameters.AddWithValue("@Value2", "Value 2");command2.ExecuteNonQuery();}}// 提交事务scope.Complete();}catch (Exception ex){// 回滚事务Console.WriteLine("Transaction failed: " + ex.Message);}}}
}
在上面的示例中,我们使用 TransactionScope 类创建了一个独立的事务作用域。在事务作用域内部,我们可以在多个连接上执行数据库操作,当所有操作都成功完成时,调用 Complete 方法来提交整个事务;如果任何操作失败,则事务会自动回滚。
请注意,为了使用 TransactionScope 类,你需要在代码文件的顶部添加对 System.Transactions 命名空间的引用,并确保所使用的数据库驱动程序和数据库支持 System.Transactions 命名空间。此外,将 TransactionScope 与分布式事务一起使用时,还需要配置相关的分布式事务管理器。
3、引用
在 .NET Framework 4.8 中,System.Transactions 命名空间是可用的,并且不需要通过 NuGet 包进行下载和安装。它是 .NET Framework 的一部分,以支持事务处理。
如果你在 .NET Framework 4.8 的项目中无法使用 System.Transactions,请确保你的项目引用了正确的 .NET Framework 版本。你可以在 Visual Studio 中检查项目属性,确认项目的目标框架版本为 .NET Framework 4.8。
如果你的项目已经正确引用了 .NET Framework 4.8,并且仍然无法使用 System.Transactions,可能有以下几种可能的原因:
1)缺少对 System.Transactions 的引用:请确保你的代码文件中包含了 using System.Transactions; 的引用语句。
2)其他命名冲突:如果你有其他命名空间或类型与 System.Transactions 冲突,可能会导致无法使用它。请检查你的代码,并确保没有命名冲突的情况发生。
3)缺少相关的程序集:确保你的项目引用了 System.Transactions 相关的程序集。在添加引用时,可以在 “引用” 文件夹中查找并添加名为 “System.Transactions” 的程序集。

相关文章:
【C#】简单聊下Framework框架下的事务
框架用的多了,之前版本的事务都忘记了。本次简单聊下.net framework 4.8框架下本身的事务 目录 1、SqlClient2、TransactionScope3、引用 1、SqlClient 在 C# 中,使用 using 块可以方便地实现对资源的自动释放,但它不适用于实现事务处理。为…...
asyncPool并发执行请求函数
asyncPool应用场景 一个不太常见的极端场景,当我们为了某个操作需要发生异步请求的时候,等待所有异步请求都完成时进行某些操作。这个时候我们不在简简单单的发送 1 - 2 个请求而是 5 - 10个(其实极端场景式 很多很多个请求,这个…...
Ubuntu 22.04上安装NFS服务
1、使用如下命令安装NFS服务端软件: # 在主机上运行以下命令 orangepiorangepi5:~$ sudo apt install nfs-server 2、在配置NFS时需要使用用户uid和组gid,可以使用id命令查看 # 在主机上运行id命令 orangepiorangepi5:~$ id uid1000(orangepi) gid100…...
数据结构--双链表
数据结构–双链表 单链表 VS 双链表 单链表:无法逆向检索,有时候不太方便 双链表:可进可退,存储密度更低一丢丢 双链表的定义 typedef struct DNode {ElemType data;struct DNode *prior, *next; }DNode, *DLinkList;双链表的初…...
javassist 动态修改 jar 包中 class
Javassist(Java Programming Assistant)是一个用于在运行时操作字节码的库,它可以用于动态修改和操作Java类。使用Javassist,可以通过修改现有的类或创建新的类来实现动态修改Jar包中的类。 下面是一个简单的示例,展示…...
什么是CC攻击?
CC攻击:DDOS(分布式拒绝服务攻击)的一种。黑客利用代理服务器或者控制的肉鸡,向目标web网页发送大量的请求,致使CPU处理不过来这么多的请求,长期处于100%的状态。造成通过该页面访问的端口堵塞,正常请求进不来。 怎么…...
LeetCode解法汇总253. 重构 2 行二进制矩阵
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵࿰…...
ChatGPT实战:生成演讲稿
当众发言(演讲)是一种传达信息、观点和情感的重要方式。通过演讲,人们可以在公共场合表达自己的观点,向观众传递自己的知识和经验,激发听众的思考和行动。无论是商务演讲、学术讲座还是政治演说,演讲稿的写…...
在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本
1. 部署环境主机(条件说明) master 192.168.186.128 CentOS Linux release 7.9.2009 (Core) node1 192.168.186.129 CentOS Linux release 7.9.2009 (Core) node2 192.168.186.130 CentOS Linux release 7.9.2009 (Core)2. 系统初始化-所有节点&am…...
http自动跳转https的配置方法
要将HTTP自动重定向到HTTPS,您需要在Web服务器上进行以下配置: 在Web服务器上安装SSL证书。 打开Web服务器配置文件(如Apache的httpd.conf或Nginx的nginx.conf)。 找到监听HTTP请求的端口(通常是80端口)。…...
重新初始化k8s集群
执行如下命令,所有节点都执行 kubeadm reset初始化集群,仅在master(centos01)上执行 [rootcentos01 opt]# kubeadm init --apiserver-advertise-address 192.168.109.130 --image-repository registry.aliyuncs.com/google_containers --kubernetes-ve…...
JetBrains编程IDE将具备Ai助手功能,或将提高开发速度
近日JetBrains发布博客文章宣布,本周所有基于IntelliJ的IDE和.NET工具的EAP版本都将具备AI助手功能。而这些操作或许将提高开发效率,并且这些AI助手也是使用自家的**ERP**模型和OpenAI服务。 JetBrains表示,当下AI助手功能主要体现在IDE的两…...
【网络原理】TCP/IP协议五层模型
🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …...
【备战秋招】每日一题:2023.05.10-华为OD机试(第二题)-解密
为了更好的阅读体检,可以查看我的算法学习博客 在线评测链接:P1307 题目内容 在全球恐怖主义危机下,一组间谍团队接收到了来自地下工作者的一串神秘代码。这组代码可以帮助他们访问恐怖分子的服务器,但是他们需要先解密代码才能使用它。代…...
【华为OD机试】矩阵最大值(python, java, c++, js)
矩阵最大值 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目描述 给定…...
通过USB和wifi连接真机编写第一个脚本
目录 一、连接手机 1、通过usb数据线连接手机 2、无线连接手机 二、编写第一个脚本 一、连接手机 1、通过usb数据线连接手机 数据线连接手机并允许调试 cmd命令行执行: adb devices 如果没有显示device信息,请检查: 手机是否开启usb调…...
【javascript】 javascript对象函数 总结
Object.entries( ) 作用:返回一个数组,获取对象所有可枚举属性的名称 和 可枚举属性的值 const obj { a: 1, b: 2 }; const entries Object.entries(obj); console.log(entries); // [[a, 1], [b, 2]] Object.keys( ) 作用:返回一个数组…...
LVS+Keepalived 高可用群集实战部署
LVSKeepalived 高可用群集实战部署 一、Keepalived的概念1、LVS2、Keepalived及其工作原理3、Keepalived体系主要模块及其作用4、VRRP协议(虚拟路由冗余协议) 二、LVSKeepalived 高可用群集部署LVS 部署1.配置负载调度器(主、备相同ÿ…...
MCU启动过程
启动文件 启动文件到底什么作用,其实启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入main 函数。 开发STM32F103用的启动文件是startup_stm32f10x_hd.s S32K146使用的启动文件是startup_S32K146.S 芯片架构 STM…...
Mysql 5.6使用配置文件my.ini来设置长时间连接数据库
对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…...
3分钟找回丢失文件!FSearch让Linux搜索体验飞起来
3分钟找回丢失文件!FSearch让Linux搜索体验飞起来 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 你是否曾在Linux系统中花费数分钟甚至数小时寻找一个文件…...
【实战指南】解决Qt平台插件加载失败:从环境变量到PyQt5重装的完整方案
1. 遇到Qt平台插件加载失败?别慌,先看懂报错信息 最近在Windows上跑labelimg标注工具时,突然弹出一个让人头疼的错误: qt.qpa.plugin: Could not load the Qt platform plugin "windows" in "" even though…...
浏览器资源嗅探终极指南:如何轻松下载网页视频与音频
浏览器资源嗅探终极指南:如何轻松下载网页视频与音频 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾想保存网页上的精彩视频却…...
百度网盘秒传链接终极指南:网页版工具全平台免费使用教程
百度网盘秒传链接终极指南:网页版工具全平台免费使用教程 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘文件分享的繁琐…...
如何一键搞定Switch游戏安装:Awoo Installer全面指南
如何一键搞定Switch游戏安装:Awoo Installer全面指南 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装的繁琐流程而…...
C语言浪漫玫瑰代码:用编程传递爱意的创意实践
1. 用代码绽放爱的玫瑰:程序员专属浪漫指南 当传统玫瑰花束遇上代码,会碰撞出怎样的火花?作为一名写过无数行代码的老程序员,我发现用C语言绘制玫瑰花不仅能展现技术实力,更能传递独特的情感温度。记得第一次给女友展…...
NVIDIA Profile Inspector实战手册:从参数调试到显卡性能全面优化
NVIDIA Profile Inspector实战手册:从参数调试到显卡性能全面优化 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 在PC硬件优化领域,专业工具与普通用户之间往往存在技术鸿沟。N…...
Tetrazine-NHBoc,cas:1380500-93-5,四嗪-氨基叔丁酯的结构特点
Tetrazine-NHBoc(四嗪-氨基叔丁酯)是一种结合了四嗪基团和N-叔丁氧羰基(NHBoc)保护基的有机化合物,以下是对其的详细介绍:一、基本信息中文名称:四嗪-氨基叔丁酯英文名称:Tetrazine-…...
基于卷积神经网络的忍者像素绘卷风格迁移:从原理到实战部署
基于卷积神经网络的忍者像素绘卷风格迁移:从原理到实战部署 1. 引言:当AI遇见像素艺术 想象一下,你手头有一张普通的照片,但希望它能变成复古游戏里的忍者像素风格——就像那些经典的街机游戏画面。这听起来像是需要专业美术师才…...
ContextMenuManager:让Windows交互回归高效本质
ContextMenuManager:让Windows交互回归高效本质 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 当你在Windows系统中右键点击文件时,是否…...
