c#连接关闭了,事务并没有关闭
用的是mysql引擎是InnoDB,用到了连接池。

连接还没关闭,但是事务开启,并执行了更新id=14的操作,这是把这一行锁住了,可以查询,但不能更新和删除,必需等锁释放,提交换回滚事务时锁被释放。直接关闭连接锁也会被释放,但是该连接上的事务还存在,所以下面重新打开连接,然后提交事务,但是此时提交事务只是释放该连接的事务,并不会执行上面的更新操作。(ps:第二次打开连接,但是连接的con.ServerThread并不是一样的,上面的是44,下面的是45.但是提交事务没出错,所以应该是同一个。下面做验证。)

第二次重新实例化一个连接,提交事务时异常了且con.ServerThread也是不一样的,所以证明上面的第二次打开连接是同一个。
如果要重新开启事务,需要重新得到一个事务。不然是不起作用的,可以试着把红线旁边的代码注释,然后单步调试,看数据库的数据变化。

C#代码。
string connString = "Server=localhost;Database=test;Uid=root;Pwd=root;Charset=utf8;pooling=true;Min Pool Size=2;Max Pool Size=20;";
MySqlConnection con = new MySqlConnection(connString);
con.Open();
string sql = "update Nc_A set name='gfeng1' where id=14";
MySqlCommand com = new MySqlCommand(sql, con);
MySqlTransaction tran = con.BeginTransaction(); int rowcount = com.ExecuteNonQuery();
//con.Close();
//con.Dispose();
//tran.Commit();
//tran.Rollback();
con.Close();
//con.Dispose();
//con = new MySqlConnection(connString);
con.Open();
tran = con.BeginTransaction();
//tran = con.BeginTransaction();
rowcount = com.ExecuteNonQuery();
tran.Commit();
//tran.Commit();
con.Close();
C# Code
sql代码
select *
from nc_a
where Id=14 DELETE FROM nc_a WHERE Id=15 UPDATE nc_a SET `name`='gfeng20' WHERE Id=14 UPDATE nc_a
SET `name`=CONCAT(`name`,'')
WHERE id=14
sql Code
表结构
CREATE TABLE `nc_a` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(250) DEFAULT NULL,
`phone` varchar(11) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=679069 DEFAULT CHARSET=latin1;
表结构
连接mysql需要MySql.Data.dll;mysql查看连接数的命令是show processlist;
c#连接关闭了,事务并没有关闭的更多相关文章
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye { //私有的构造函数,保证外部不能实例化 private ...
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...
- TCP的三次握手(建立连接)与 四次挥手(关闭连接)
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: TCP报文格式上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位 ...
- executequery要求已打开且可用的connection,连接的当前状态为已关闭
问题: executequery要求已打开且可用的connection,连接的当前状态为已关闭 错误原因: 连接的当前状态为已关闭.或者只创建了Connection对象,没有调用Connection. ...
- SQL Server 中用DBCC Opentran语句查看未关闭的事务(转载)
从SQL Server 2008开始,可以使用DBCC Opentran语句查看数据库中最早一个没有被关闭的事务,下面这篇文章讲述了如何使用DBCC Opentran语句. An Open trans ...
- TCP的三次握手(建立连接)和四次挥手(关闭连接)(转)
转自:(http://www.cnblogs.com/Jessy/p/3535612.html) 参照: http://course.ccniit.com/CSTD/Linux/reference/f ...
- TCP系列03—连接管理—2、TCP连接的同时打开和同时关闭
在前面的内容中我们介绍了TCP连接管理中最常见的三次握手方式和四次挥手的方式.但是有可能A和B两端同时执行主动打开并连接对方或者同时执行主动关闭连接(尽管发生这种情况的可能性比较低低),这个时候的流程 ...
- 【转载】TCP的三次握手(建立连接)和四次挥手(关闭连接)
建立连接: 理解:窗口和滑动窗口TCP的流量控制 TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包 ...
- 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:小书go https://blog.csdn.net/qzcsu/article/details/72861891 背 ...
随机推荐
- HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用
在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web ...
- c#中get set 的使用
在早期学习c#的过程中,经常遇到这样的语句: public string StudentName { get{return stuName;} set{stuName=value;} } 当时也不是很 ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
- jvm内存区域
概述 jvm内存分为几个区域: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 这些内存区域是在java进程中细分的,为java程序提供服务 不同的区域存储的内容不一样,生命周期 ...
- 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎
最近业务上有要求,要实现类似oracle 的dblink linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/ ...
- 调用sharepoint 2010 REST报版本过低
问题描述: 写了一个webservice调用sharepoint REST,本机测试成功,部署到服务器上后报错 (System.Data.Services.Client.DataServiceQuer ...
- iOS之按钮出现时加一个动画效果
//按钮出现时的动画效果 + (void)buttonAnimation:(UIButton *)sender { CAKeyframeAnimation *animation = [CAKeyfra ...
- React Native知识12-与原生交互
一:原生传递参数给React Native 1:原生给React Native传参 原生给JS传数据,主要依靠属性. 通过initialProperties,这个RCTRootView的初始化函数的参 ...
- js动态获取子复选项并设计全选及提交
在做项目的时候,会遇到根据父选项,动态的获取子选项,并列出多个复选框,提交时,把选中的合并成一个字符提交后台 本章将讲述如何通过js控制实现该操作: 1:设计父类别为radio,为每一个radio都加 ...
- C#Winform连接Oracle数据库
转载▼ http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html 一.连接方法 (1)System.Data.OracleClient 注意1:此方法在 ...