T - SQL使用事务 及 在Winform使用事务
事务适用场景
1 事务使用在存储过程中,直接在数据库中进行编写
2 事务使用在Winfrom项目中
SQl:使用事务转账操作的实例
一般都会找一个变量记录错误的个数,@error记录上一句sql的错误和错误编号
declare @errornum int = 0 -- 定义一个记录错误个数的变量
begin transaction -- 开启事务begin-- 转出操作update Card set CurrentMoney = CurrentMoney - 100000 where StudentId = 1002set @errornum = @errornum + @@error -- 把@@error加到总的记录上-- 转入操作update Card set CurrentMoney = CurrentMoney + 100000 where StudentId = 1004set @errornum = @errornum + @@ERRORif(@errornum > 0) -- 证明有错误,把之前已经执行的操作回滚到原先的数据上rollback transaction -- 回滚事务else -- 没有错误,提交事务commit transactionend
go
select * from Card
声明一个过程 包含三个输入参数 分别是两个转账的卡号 和转账的金额
use YinHangDB
go
create procedure tt10000@outZhangHao int,@ruZhangHao int,@Money int
asdeclare @c1 int = 0--错误的个数begin transaction --开启事务begin--转出update Card set CurrentMoney = CurrentMoney - @Money where StudentId = @outZhangHaoset @c1 = @c1 + @@ERROR--转入update Card set CurrentMoney = CurrentMoney + @Money where StudentId = @ruZhangHaoset @c1 = @c1 + @@ERRORif(@c1>0)rollback transactionelse commit transactionendgo
select * from Card
--测试转账失败的操作
exec tt10000 1000,1001,100000--测试转账成功
exec tt10000 1000,1001,50000
Winfrom 使用事故实例
链接SQl 数据库
public string connString = @"Server=.;Database=SMDB;Uid=sa;Pwd=123456";
搭建Winfrom界面

测试事务回滚的方法
private void button1_Click(object sender, EventArgs e){//删除前学生总个数int num1 = (int)GetSingleCount("select count(*) from Students");this.listBox1.Items.Add("删除前学生总个数:"+ num1); // 展示在listbox下// 测试删除学生失败进行事务回滚操作//定义一个列表字符串 List<string> list = new List<string>(){"delete from Students where StudentId = 1000005","delete from Students where StudentId = 1000024","delete from Students where StudentId = 1000006"};//执行删除操作 把list里面每一句sql都去执行一下int result = 0;try{result = UpdateDataBase(list);}catch (Exception ex){this.listBox1.Items.Add(ex.Message);}if (result > 0){this.listBox1.Items.Add("删除成功");}else{this.listBox1.Items.Add("删除失败");}this.listBox1.Items.Add("删除之后剩余人数为:" + (int)GetSingleCount("select count(*) from Students"));}
封装多个删除语句执行操作
参数是多个sql的集合
返回值 int是否执行成功
public int UpdateDataBase(List<string> list)
{SqlConnection conn = new SqlConnection(connString);// new SqlCommand(sql, conn)// 没有指定执行sql 没有指定连接,下面必须在写代码把连接对象添加上SqlCommand cmd = new SqlCommand(); cmd.Connection = conn;try{conn.Open();//开启事务cmd.Transaction = conn.BeginTransaction();int result = 0;//记录删除时候受影响的行数//取出每一个sql语句 分别执行foreach (string sql in list){//设置执行的sqlcmd.CommandText = sql; result += cmd.ExecuteNonQuery();// cmd.ExecuteNonQuery() 返回受影响行数如果删除成功了,受影响行数不为0}//如果执行错误了 跳转到catch里面 在catch执行回滚// 没有出错 提交事务cmd.Transaction.Commit();return result;}catch(Exception ex){if (cmd.Transaction != null){cmd.Transaction.Rollback(); // 执行sql语句有错误的情况 执行回滚操作}throw new Exception("执行删除sql事务出错:" + ex.Message);}finally{// 不管是否执行有误 把事务置为null 清除事务if(cmd.Transaction!=null){cmd.Transaction = null;}conn.Close();}
}
获取数据库个数的方法
public object GetSingleCount(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
return cmd.ExecuteScalar();}
测试事务提交的方法
private void button2_Click(object sender, EventArgs e)
{//删除前学生总个数int num1 = (int)GetSingleCount("select count(*) from Students");this.listBox1.Items.Add("删除前学生总个数:" + num1); // 展示在listbox下// 测试删除学生失败进行事务回滚操作//定义一个列表字符串 List<string> list = new List<string>(){"delete from Students where StudentId = 1000033","delete from Students where StudentId = 1000031","delete from Students where StudentId = 1000032"};//执行删除操作 把list里面每一句sql都去执行一下int result = 0;try{result = UpdateDataBase(list);}catch (Exception ex){this.listBox1.Items.Add(ex.Message);}if (result > 0){this.listBox1.Items.Add("删除成功");}else{this.listBox1.Items.Add("删除失败");}this.listBox1.Items.Add("删除之后剩余人数为:" + (int)GetSingleCount("select count(*) from Students"));
}
相关文章:
T - SQL使用事务 及 在Winform使用事务
事务适用场景 1 事务使用在存储过程中,直接在数据库中进行编写 2 事务使用在Winfrom项目中 SQl:使用事务转账操作的实例 一般都会找一个变量记录错误的个数,error记录上一句sql的错误和错误编号 declare errornum int 0 -- 定义…...
string(三)--实现
大家看了这么久的string了,可能对string的简单实现有兴趣,所以我实现了一个string类的常用接口,大家可以自行查看: 我是分多文件写的: string.h: #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <ios…...
textbox跨线程写入
实现实例1 实现效果 跨线程实现 // 委托,用于定义在UI线程上执行的方法签名 //public delegate void SetTextCallback(string text);public void textBoxText(string text){// 检查调用线程是否是创建控件的线程 if (textBox1.InvokeRequired){// 如果不是&#…...
幻兽帕鲁专用服务器搭建之Linux部署配置教程
大家好我是飞飞,上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求,很多小伙伴就寻思用Linux系统搭建占用会不会小一点?有计算机基础的小伙伴都知道Linux系统和Windows系统相比,…...
Kubernetes: 本地部署dashboard
本篇文章主要是介绍如何在本地部署kubernetes dashboard, 部署环境是mac m2 下载dashboard.yaml 官网release地址: kubernetes/dashboard/releases 本篇文章下载的是kubernetes-dashboard-v2.7.0的版本,通过wget命令下载到本地: wget https://raw.githubusercont…...
Outlook邮箱IMAP密码怎么填写?账户设置?
Outlook邮箱IMAP密码是什么?Outlook如何设置IMAP? 许多用户会选择通过IMAP协议将邮箱与各种邮件客户端进行连接。而在设置过程中,填写IMAP密码是必不可少的一步。那么,Outlook邮箱的IMAP密码应该如何填写呢?接下来&am…...
[计算机网络]--I/O多路转接之poll和epoll
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、poll函…...
【NTN 卫星通信】卫星和无人机配合的应用场景
1 场景概述 卫星接入网是一种有潜力的技术,可以为地面覆盖差地区的用户提供无处不在的网络服务。然而,卫星覆盖范围对于位于考古或采矿地点内部/被茂密森林覆盖的村庄/山谷/靠近山丘或大型建筑物的用户可能很稀疏。因此,涉及卫星接入和无人驾…...
Git 分布式版本控制系统
Git是一个分布式版本控制系统,可以记录项目文件的变动并管理项目的不同版本。以下是Git的基本概念和使用方式: 仓库(Repository):Git用仓库来存储项目文件。仓库可以是本地仓库,也可以是远程仓库࿰…...
ng : 无法将ng项识别为 cmdlet、函数、脚本文件或可运行程序的名称
ng : 无法将“ng”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”,出现这种错误,那说明你angular-cli没有下载所以环境变量里没有相应的东西 1、需要在cmd里输入npm install -g angular/cli 2、之后运行angular命令时还可能出现这种错误 “ng : …...
iOS小技能:苹果书签打包教程【WebClip描述文件(WebClip Configuration Profile)】
文章目录 引言I WebClip描述文件1.1 属性说明1.2 利用Apple Configurator 2生成描述文件II 部署方式和签名2.1 对 .mobileconfig 文件进行签名2.2 部署方式引言 WebClip描述文件(WebClip Configuration Profile)是一种用于iOS设备的简易配置文件,它可以在你的iOS设备(如iP…...
Spring Cloud项目合规性注册之-(单元集成测试报告)
用于合规性注册,本文章仅提供模板 这个大纲涵盖了从单元测试到集成测试,再到自动化和持续集成的全方位测试过程。 一、引言 1. 项目概述 "xxxxxx"是一个先进的数据管理和展示平台,旨在提供高效、可靠的数据服务。该平台通过集成各…...
IntelliJ IDEA 常用的插件
IntelliJ IDEA有很多常用的插件,这些插件可以扩展IDE的功能,提高开发效率。以下是一些常用的插件: Maven Helper:这是一款分析Maven依赖冲突的插件。在没有此插件时,查看Maven的依赖树和检查依赖包冲突可能需要输入命…...
超详细红黑树的模拟实现
前言 有人说设计出AVL树的的人是个大牛,那写红黑树(RBTree)的人就是天才! 上一篇文章,我们已经学习了AVL树,牛牛个人认为AVL树已经够优秀了,那让我们一起探究一下,为什么红黑树比AV…...
【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源
文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront(CDN)的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源,而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…...
ES-ES的基本概念
ES的基本概念 一、文档 1.1 文档相关概念 ES是面向文档的,文档是所有可搜索数据的最小单位,可以对比理解为关系型数据库中的一条数据 日志文件中的一条日志信息一本电影的具体信息/一张唱片的详细信息 文档会被序列化成JSON格式保存在ES中 JSON对象由…...
排序算法——快速排序的非递归写法
快速排序的非递归 我们写快速排序的时候,通常用的递归的方法实现快速排序,那么有没有非递归的方法实现快速排序呢?肯定是有的。思想还是一样的,不过非递归是看似是非递归其实还是递归。 思路解释 快速排序的非递归使用的是栈这…...
【论文阅读】基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取
Bubble feature extraction in subcooled flow boiling using AI-based object detection and tracking techniques 基于人工智能目标检测与跟踪技术的过冷流沸腾气泡特征提取 期刊信息:International Journal of Heat and Mass Transfer 2024 级别:EI检…...
RabbitMQ讲解与整合
RabbitMq安装 类型概念 租户 RabbitMQ 中有一个概念叫做多租户,每一个 RabbitMQ 服务器都能创建出许多虚拟的消息服务器,这些虚拟的消息服务器就是我们所说的虚拟主机(virtual host),一般简称为 vhost。 每一个 vhos…...
python 基础知识点(蓝桥杯python科目个人复习计划56)
今日复习内容:做题 例题1:最小的或运算 问题描述:给定整数a,b,求最小的整数x,满足a|x b|x,其中|表示或运算。 输入格式: 第一行包括两个正整数a,b; 输出格式&#…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
