C#操作MySQL事务 -- MySqlTransaction

【MySQL】C# 连接MySQL 安装完MySQL之后,在安装的默认目录 C:Program Files (x86)MySQLConnector NET 8.0 中查找MySQLData.dll文件。因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。在Visual Studio 中为项目中添加引用。 阅读详情
AI摘要

这篇博客详细介绍了如何在C#中操作MySQL数据库进行事务处理,包括小数据量和大数据量的情况。首先,文章讲解了事务的基本概念,并阐述了在MySQL中配置事务的步骤。接着,通过C#代码示例展示了如何在应用程序中实现事务的开启、提交和回滚。最后,讨论了C#处理大数据事务的场景和示例代码。

目录

一、前期准备

二、事务概念

三、MySQL配置事务 -- 小数据

四、C#配置事务  -- 大数据


涉及知识点: MySQL事务 -- MySQL存储过程 -- MySqlTransaction配置

一、前期准备

1、配置App.config文件  -- 若文件未找到,则 Ctrl+Shift+A --> 添加 " 应用程序配置文件 " 

	<connectionStrings>
		<add name="connStr"
		     connectionString="server=localhost;database=mysql_student;uid=root;pwd=123456"
			 providerName="MySql.Data.MySqlClient"/>
	</connectionStrings>

2、导入Nuget包 

3、引入using

using MySql.Data.MySqlClient;
using System;
using System.Configuration;
using System.Data;

4、创建MySQL 数据表 

create table tb_user(
    id int primary key,
    name varchar(10),
    age int
);
insert into tb_user(id,name,age)
       values (1,'小王',22),
              (2,'小白',20),
              (3,'小思',19),
              (4,'小囡',21);

二、事务概念

    事务一般使用 增删改 操作

    事务执行过程: 
             开启
             提交  -- 正常
             回滚  -- 出现问题

三、MySQL配置事务 -- 小数据

修改前数据库数据:

 MySQL数据库中的事务配置:  -- MySQL 代码

create procedure UpdataName(p_id_1 int, p_name_1 varchar(10),
                            p_id_2 int, p_name_2 varchar(10))
begin
    #捕获异常 -- 若报错,则 @err_flag = true
    declare continue handler for sqlexception set @err_flag = true;

    set @err_flag = false;
    set @@autocommit = 0; #设置手动
    start transaction; #开始事务

    update tb_user as tb set tb.name = p_name_1 where tb.id = p_id_1;
    #select * from XXX;  #验证回滚时使用
    update tb_user as tb set tb.name = p_name_2 where tb.id = p_id_2;

    if @err_flag then #若报错
        rollback;  #回滚
        set @@autocommit = 1; #设为自动
        select @err_flag;
    else  #若正确
        commit; #提交
        set @@autocommit = 1; #设为自动
        select @err_flag;
    end if;

end $$

 C#对MySQL的操作: -- C#代码

 internal class Program
    {
        static void Main(string[] args)
        {
            //获取外部文件字符串
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

            using (MySqlConnection connect = new MySqlConnection(connStr))
            {
                MySqlCommand cmd = new MySqlCommand("UpdataName", connect);
                cmd.CommandType = CommandType.StoredProcedure; //命令类型:存储过程

                MySqlParameter[] parames = {
                    new MySqlParameter("p_id_1",1),
                    new MySqlParameter("p_name_1","小兰"),
                    new MySqlParameter("p_id_2",2),
                    new MySqlParameter("p_name_2","小紫"),
                };

                cmd.Parameters.AddRange(parames);

                connect.Open();
                object obj = cmd.ExecuteScalar();
                connect.Close();

                if (obj.ToString().Equals("0"))
                {
                    Console.WriteLine("修改成功");
                }
                else
                {
                    Console.WriteLine("修改失败");
                }

            }
            Console.WriteLine("Hello World!");
        }
    }

结果: 

 

四、C#配置事务  -- 大数据

修改前数据库内容

C#对MySQL的操作: -- C#代码

    internal class Program
    {
        static void Main(string[] args)
        {
            //获取外部文件字符串
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

            using (MySqlConnection connect = new MySqlConnection(connStr))
            {
                MySqlTransaction trans = null;
                try
                {
                    connect.Open();
                    //开启事务
                    trans = connect.BeginTransaction();
                    MySqlCommand cmd = connect.CreateCommand();
                    //设置要执行的事务
                    cmd.Transaction = trans;

                    cmd.CommandText = "update tb_user as tb set tb.name = @name_1 where tb.id = @id_1;";
                    cmd.Parameters.Clear();

                    MySqlParameter[] parames = new MySqlParameter[] {
                    new MySqlParameter("@name_1","小王"),
                    new MySqlParameter("@id_1",1)
                    };

                    cmd.Parameters.AddRange(parames);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();

                    //验证回滚时使用
                    //cmd.CommandText = "select * from XXX";
                    //cmd.ExecuteNonQuery();

                    cmd.CommandText = "update tb_user as tb set tb.name = @name_2 where tb.id = @id_2;";
                    cmd.Parameters.Clear();
                    MySqlParameter[] parames1 = new MySqlParameter[] {
                    new MySqlParameter("@name_2","小白"),
                    new MySqlParameter("@id_2",2)
                    };

                    cmd.Parameters.AddRange(parames1);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();

                    trans.Commit(); //提交
                    Console.WriteLine("!!!成功!!!");
                }
                catch (MySqlException ex)
                {
                    trans.Rollback(); //回滚
                    Console.WriteLine("!!!错误!!!" + ex.Message);
                }
                finally
                {
                    trans.Dispose(); //释放
                    connect.Close();
                }
            }
            Console.WriteLine("Hello World!");
        }
    }

结果: 

 


如有错误,烦请批评指正

利用VS的C#语言连接MySQL数据库 1.用HeidiSQL连接MySQL数据库不成功,可以将C:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.dll复制到HeidiSQL的安装目录下。 2. 方法一:Visual Studio,在项目(右键)-管理NuGet程序包(N) 然后在浏览里面搜索MySql.Data并进行安装。(已测试,使用的是.NET Framework 4.... 阅读详情

相关推荐

C#连接MySQL操作详解

首先,您需要安装并引用MySQL Connector/Net,这是一个官方提供的用于在C#中连接MySQL数据库的库。您可以从MySQL官方网站上下载并安装这个驱动程序,然后在您的项目中添加对MySQL Connector/Net的引用。通过本文的介绍,您已经学会了如何使用C#连接和操作MySQL数据库。您可以根据实际需求,进一步扩展和优化代码,以满足自己的需求。在这篇文章中,我们将详细介绍如何使用C#连接和操作MySQL数据库。除了查询语句,我们还可以执行更新语句,比如插入、更新和删除等操作。

TechPr的博客 1364

C# 连接 MySQL 数据库

C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台一般使用 SQL Server,在两年前我买过100元一年的学生服务器,当时也是买着玩的,装 MySQL 数据库使用起来就非常卡,也不知道为什么,但 SQL Server 操作起来不但不卡,还非常的流畅,但是 SQL Server 安装起来比较麻烦,卸载也容易出问题,尤其是盗版系统,我在工作中,也出现了几次 SQL Server 卸载不了的事,我自己电脑用的正版Win10系统,从没出现这种事。

熊思雨的博客 3万+

MySQL数据库专栏(四)MySQL数据库链接操作C#篇

本篇文章主要介绍C#链接MySQL数据库的接口介绍,使用实例及注意事项,辅助类的封装及调用实例,可以直接移植到项目里面使用。

1077

C#连接Mysql数据库详细教程(内附Mysql及Navicat)

Mysql连接首先需要用到Mysql.Data.dll连接文件,也就是Mysql Connector Net这一文件,下载后安装会自动在C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.0这个路径(貌似...)最后是相关数据库,user_info表的结构,可以在引用完dll文件后后创建这个数据库直接测试该C#窗体文件。之后就需要在VS的引用中引用这一文件,然后就可以进行数据库的连接操作了。之后双击窗体中的button,定义输入方法验证连接。

laodaye_xiaolizi的博客 2万+

C#连接MySQL数据库实战指南

本文还有配套的精品资源,点击获取 简介:在Windows和.NET项目开发中,结合C#和MySQL可以打造强大的数据驱动应用。本文介绍如何通过MySQL Connector/NET驱动连接MySQL数据库,包括安装驱动、引用库、构建连接字符串、执行SQL命令、数据读取、事务处理、异常处理以及关闭连接等关键步骤。通过提供的示例代码,读者可以实际操作并加深理解。文章还提示了一些...

weixin_32869687的博客 3424

MySQL或Oracle通过ODBC与C#建立连接和进行事务处理

1.通过ODBC使C#能够对MySQL数据进行访问,并可以进行事务处理。 2.通过ODBC使C#能够对Oracle数据进行访问,并可以进行事务处理。 3.文档里面包含了环境配置,软件安装的全过程。最后包含了可执行的数据库连接共同的C#代码提供参考。

c# mysql加事务_c# 实现mysql事务

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MySql.Data.MySqlClient;namespace mysql事务测试{class Program{static void Main(string[] ...

weixin_42425947的博客 331

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 271

c# mysql加事务_c# mysql事务的简单应用

代码如下 :using System;using System.Collections.Generic;using System.Text;using MySql.Data.MySqlClient;using System.Data;namespace _14._9connection链接数据库{class Program{static void Main(string[] args){//Con...

weixin_32390279的博客 495

自定义控件三部曲视图篇(六)——RecyclerView系列之三自定义LayoutManager

前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如: 可以看到这些效果都非常棒,通过这一节的学习,大...

启舰 1万+

Linux PE vs WinPE:为何麒麟系统修复需要专属工具?

本文探讨了Linux PE与WinPE在修复国产麒麟系统时的关键差异,强调了专属工具的必要性。通过分析文件系统兼容性、引导修复、硬件适配和安全合规等方面,揭示了通用PE工具的局限性,并提供了构建专属修复工具链的实用方案,确保系统维护的高效与安全。

weixin_29290863的博客 1057

c# mysql事务的简单应用

代码如下 : using System; using System.Collections.Generic; using System.Text; using MySql.Data.MySqlClient; using System.Data; namespace _14._9connection链接数据库 {     class Program     {         static vo...

u012525295的博客 1407

Windows10系统添加虚拟网卡(Microsoft Loopback Adapter)的方法

1、按下win + R键,在其中输入:hdwwiz,然后 (enter) 2、点击下一步即可 3、其次选择【网络适配器】,然后点击【下一步】。 4、在厂商处选择Microsoft,网络适配器处选择【Microsoft Loopback Adapter】选项 ,点击【下一步】。 5、通过上面几个步骤的设置后,一块虚拟网卡的安装设置就算是完成了。 ...

一个懒鬼的博客 2万+

c# mysql加事务_C#的MySQL提交事务不工作(连接必须是有效的,开放的,以提交事务) (C# MySQL commit transaction is not working (Connect...

2015-01-12 03:57:480I have a class that will help me to connect to a database start transaction and run some queries, and once I am done with all the queries I commit/rollback the transaction.Here is ...

weixin_39917090的博客 298

Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群

本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。

ww90123的博客 254

Flutter项目在M1/M2 Mac上跑iOS模拟器报错?手把手教你搞定‘arm64架构不兼容’问题

本文详细解析了Flutter项目在M1/M2 Mac上运行iOS模拟器时遇到的‘arm64架构不兼容’问题,提供了多种解决方案,包括排除模拟器的arm64架构、强制使用x86_64架构以及修改插件Podspec文件。帮助开发者快速解决架构兼容性问题,提升开发效率。

weixin_33713707的博客 335

ADO编程入门知识点

1.连接 MySQL 必备:引入;2.Connection 负责通路,Command 负责执行 SQL;3.DataReader:连接、只读、流式读取;DataSet:断开、内存完整数据表;4.DataAdapter 是数据库和 DataSet 的桥梁,Fill 填充、Update 更新;5.事务保证多 SQL 原子性,Commit 提交,Rollback 回滚;6.DBHelper 封装通用操作,避免重复写连接、关闭代码;

2603_96582622的博客 168

VTsystem背景检查函数Value Valid

Value Valid是个非常实用的函数,如何让它灵活的为我们所用,便是本文的内容。

欢迎来到eee的博客 795

c# mysql 事务回滚_C# mysql 处理 事务 回滚 提交

MySqlConnection myCon;void iniMysql(){//连接数据库myCon = new MySqlConnection("server=127.0.0.1;username=zpcmysql;password=zpc;database=test;SslMode=none;charset=utf8;");if (!myCon.Ping()){myCon.Open();}//...

weixin_30036289的博客 404

从零开始学习PX4源码0(固件下载及编译)

本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!!下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有一定的差异(开发环境及源码文件格式等),我们是从之前版本开始学习,为什么不从最新的?因为之前版本代码文件格式还是固定的,最新的变化很大,不利于初学者学习,apm和px4不好的地方就是之前版本v1.7.2和最新版本v1.14.0有些文件总是在变化,这样很不好。

陌城烟雨 4616

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

winform 操作mysql_C#-操作Mysql

usingMySql.Data.MySqlClient;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacemysql_nf{class...

weixin_39585675的博客 212

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

c#+调用mysql+事务,C# mysql 处理 事务 回滚 提交

MySqlConnection myCon;void iniMysql(){//连接数据库myCon = new MySqlConnection("server=127.0.0.1;username=zpcmysql;password=zpc;database=test;SslMode=none;charset=utf8;");if (!myCon.Ping()){myCon.Open();}//...

weixin_34649105的博客 256

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql transaction用法_mysqltransaction用法

A.MySQL是一款使用广泛的支持事务处理的免费的数据库产品B.Oracle产品适合大型复杂的数据库应用,并且适合进行事务分析处理C.Windows NT结构的服务器平台和Access搭配是......MySQL数据库基础与实例教程之视图触发器孔祥盛 内容一览 本章首先讲解了 视图以及触发器的 管理及使用,然后 结合“选课系统” 分别介绍视图以及 触发器在该系统中 ......p=844 http...

weixin_35094077的博客 523

c# mysql加事务_C#中ADO事务(轻型事务/分布式事务) -附:(C#远程访问linux(ubuntu)或windows的mysql数据库 )...

轻型事务:TransactionSqlConnection mycon = new SqlConnection(constr);mycon.Open();SqlCommand cmd = new SqlCommand();SqlTransaction mytran = mycon.BeginTransaction();//绑定数据库连接和事务对象cmd.Connection = mycon;cmd...

weixin_39964819的博客 212

mysql 事务未提交事务,如何确定MySQL事务中是否有未提交的写操作?

I'm working with a very complex codebase and wish to do some introspection of how it works with MySQL. (Note that I'm using InnoDB).Specifically, in a method I'm writing, I wish to determine if there...

weixin_39634878的博客 409

c# mysql使用MySql.Data批量插入数据

try { DataTable dt = new DataTable(); dt.Columns.Add("param_id", typeof(int)); dt.Columns.Add("param_name", typeof(string)); DataRow row = dt.NewRow(); row["id"] =

weixin_38938932的博客 1405
上一篇: MySqlDataAdapter桥接器的使用
下一篇: C#与MySQL的连接的各种方法
**启程**
博客等级 码龄6年 49粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值