当前位置: 首页 > news >正文

学习并测试SqlSugar的单库事务功能

  SqlSugar支持单库事务、多租户事务、多库事务,本文学习并测试单库事务的基本用法。
  使用SqlSugarClient类、ISqlSugarClient接口都可以创建SqlSugarClient数据库操作实例,其区别在于,针对单库而言,SqlSugarClient类支持调用BeginTran\CommitTran\RollbackTran、Ado. BeginTran\Ado.CommitTran\Ado.RollbackTran等两种方式处理事务,而ISqlSugarClient接口仅支持Ado.BeginTran\Ado.CommitTran\Ado.RollbackTran方式实现事务。
  针对低版本的SqlSugar,也可以调用ISqlSugarClient或SqlSugarClient的AsTenant().BeginTran\ AsTenant().CommitTran\AsTenant().RollbackTran处理事务。

  下面的测试代码,数据表中有四条数据,需要在一个事务中清空表格内容后再插入新数据。
在这里插入图片描述
  下面是正常执行的代码及数据库操作结果:

List<AppUsers> lstUsers=new List<AppUsers>();AppUsers appUsers = new AppUsers();
appUsers.UserName = "tom";
appUsers.Password = "321";
lstUsers.Add(appUsers);appUsers = new AppUsers();
appUsers.UserName = "jack";
appUsers.Password = "123";
lstUsers.Add(appUsers);appUsers = new AppUsers();
appUsers.UserName = "lucy";
appUsers.Password = "123";
lstUsers.Add(appUsers);try
{db.BeginTran();db.Deleteable<AppUsers>().ExecuteCommand();db.Insertable<AppUsers>(lstUsers).ExecuteCommand();db.CommitTran();
}
catch (Exception ex)
{db.RollbackTran();Console.WriteLine(ex.Message );
}

在这里插入图片描述

  如果将插入的数据的名称相同(UserName是主键),则插入数据会报错,同时也触发了回滚操作,之前的数据未被清空。代码及数据库结果如下所示:

List<AppUsers> lstUsers=new List<AppUsers>();AppUsers appUsers = new AppUsers();
appUsers.UserName = "大娃";
appUsers.Password = "321";
lstUsers.Add(appUsers);appUsers = new AppUsers();
appUsers.UserName = "大娃";
appUsers.Password = "123";
lstUsers.Add(appUsers);try
{db.BeginTran();db.Deleteable<AppUsers>().ExecuteCommand();db.Insertable<AppUsers>(lstUsers).ExecuteCommand();db.CommitTran();
}
catch (Exception ex)
{db.RollbackTran();Console.WriteLine(ex.Message );
}

在这里插入图片描述
在这里插入图片描述

  将插入的数据改正确,再运行程序即可正常清空并插入数据。
在这里插入图片描述

  上述代码使用BeginTran\CommitTran\RollbackTran操作事务,测试过程中也使用了其它两种方式,效果相同。

参考文献:
[1]https://www.donet5.com/home/Doc?typeId=1183

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s二次开发-kubebuiler一键式生成deployment,svc,ingress
  • Lamp 小白菜鸟从入门到精通
  • Git 用法
  • blender和3dmax和maya和c4d比较
  • 各类专业技术的pdf电子书
  • SmartX 超融合 vs vSAN 8:数据库场景下的性能对比
  • 塔子哥的快乐值-美团2023笔试(codefun2000)
  • 静态路由技术
  • 内存卡损坏读不出怎么修复?内存卡数据恢复的7个方法请收好!
  • ubuntu23安装tensorRT步骤记录
  • linux(CentOS、Ubuntu)安装python3.12.2环境
  • Java 集合框架:HashMap 的介绍、使用、原理与源码解析
  • 在学习使用LabVIEW的过程中,需要注意哪些问题?
  • Python 3 网络编程
  • 时效性知识点是否值得花时间学习和研究
  • 2017年终总结、随想
  • Angular Elements 及其运作原理
  • Flex布局到底解决了什么问题
  • IP路由与转发
  • Java 多线程编程之:notify 和 wait 用法
  • js ES6 求数组的交集,并集,还有差集
  • laravel5.5 视图共享数据
  • mac修复ab及siege安装
  • Python连接Oracle
  • REST架构的思考
  • Spring Cloud Feign的两种使用姿势
  • Vue全家桶实现一个Web App
  • Webpack 4x 之路 ( 四 )
  • web标准化(下)
  • 大整数乘法-表格法
  • 浮动相关
  • 将回调地狱按在地上摩擦的Promise
  • 前端代码风格自动化系列(二)之Commitlint
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 问题之ssh中Host key verification failed的解决
  • 用 Swift 编写面向协议的视图
  • kubernetes资源对象--ingress
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #数学建模# 线性规划问题的Matlab求解
  • $().each和$.each的区别
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (~_~)
  • (C#)一个最简单的链表类
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (剑指Offer)面试题34:丑数
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)利用ant在Mac 下自动化打包签名Android程序