zoukankan      html  css  js  c++  java
  • c#连接关闭了,事务并没有关闭

    用的是mysql引擎是InnoDB,用到了连接池。

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

     

    第二次重新实例化一个连接,提交事务时异常了且con.ServerThread也是不一样的,所以证明上面的第二次打开连接是同一个。

    如果要重新开启事务,需要重新得到一个事务。不然是不起作用的,可以试着把红线旁边的代码注释,然后单步调试,看数据库的数据变化。

    C#代码。

     1 string connString = "Server=localhost;Database=test;Uid=root;Pwd=root;Charset=utf8;pooling=true;Min Pool Size=2;Max Pool Size=20;";
     2             MySqlConnection con = new MySqlConnection(connString);
     3             con.Open();
     4             string sql = "update Nc_A set name='gfeng1' where id=14";
     5             MySqlCommand com = new MySqlCommand(sql, con);
     6             MySqlTransaction tran = con.BeginTransaction();
     7 
     8             int rowcount = com.ExecuteNonQuery();
     9             //con.Close();
    10             //con.Dispose();
    11             //tran.Commit();
    12             //tran.Rollback();
    13             con.Close();
    14             //con.Dispose();
    15             //con = new MySqlConnection(connString);
    16             con.Open();
    17             tran = con.BeginTransaction();
    18             //tran = con.BeginTransaction();
    19             rowcount = com.ExecuteNonQuery();
    20             tran.Commit();
    21             //tran.Commit();
    22             con.Close();
    C# Code

    sql代码

     1 select *
     2 from nc_a
     3 where Id=14
     4 
     5 DELETE FROM nc_a WHERE Id=15
     6 
     7 UPDATE nc_a SET `name`='gfeng20' WHERE Id=14
     8 
     9 UPDATE nc_a
    10 SET `name`=CONCAT(`name`,'1')
    11 WHERE id=14
    sql Code

    表结构

    1 CREATE TABLE `nc_a` (
    2   `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    3   `name` varchar(250) DEFAULT NULL,
    4   `phone` varchar(11) DEFAULT NULL,
    5   `address` varchar(50) DEFAULT NULL,
    6   PRIMARY KEY (`Id`)
    7 ) ENGINE=InnoDB AUTO_INCREMENT=679069 DEFAULT CHARSET=latin1;
    表结构

    连接mysql需要MySql.Data.dll;mysql查看连接数的命令是show processlist;

  • 相关阅读:
    Inno Setup 6.0.4
    使用Microsoft Enterprise Library 5.0记录日志信息
    Log4net用法
    继续接着上一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器]
    磁力王:种子磁力搜索神器使用教程
    C# WebBrowser 网页缩放的方法
    Mysql5.7修改root密码教程
    【MAVEN】maven项目下载更新pom jar包速度慢 解决方案
    C# DataGridView自动保存列的宽度和位置
    Java实现敏感词过滤
  • 原文地址:https://www.cnblogs.com/tpfOfBlog/p/6249687.html
Copyright © 2011-2022 走看看