【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…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
