MySqlConnection 并发连接的问题

时间:2023-02-23 09:43:16

最近在做项目的过程中遇到一个MySql在并发时初始化的问题,场景是这样子的:

我在Job中设定在同一时间点启动多个操作来访问数据库更新数据,结果在创建连接的时候抛出下面的问题:

Note that while a DataReader is open, the Connection is in use exclusively by that DataReader. You cannot execute any commands for the Connection, including creating another DataReader, until the original DataReader is closed.

我创建链接的代码如下:

 public class DBConnection
{
private static MySqlConnection _conn; public static MySqlConnection Conn
{
get
{
if (_conn == null)
{
MySqlConnection connection = new MySqlConnection(ConstValue.DBConnectionString);
_conn = connection;
}
return _conn;
}
} public static MySqlConnection CreateConnection()
{
return Conn;
}
}

之前用Sql Server数据库连接的时候也没有出现过什么问题,后来多方查找资料发现这是MySql连接的BUG。

官网描述如下:https://bugs.mysql.com/bug.php?id=7248

 MySql.Data.MySqlClient.MySqlException: There is already an open DataReader associated with this Connection which must be closed first.

也就是说同一时刻只允许有一个连接被打开读取数据。

* 上的分析如下:

You are using the same connection for the DataReader and the ExecuteNonQuery. This is not supported, according to MSDN:

Note that while a DataReader is open, the Connection is in use exclusively by that DataReader. You cannot execute any commands for the Connection, including creating another DataReader, until the original DataReader is closed.

这下就明白了,我们在创建连接的时候必须每次new出来一个连接对象。改造一下代码:

public class DBConnection
{
public static MySqlConnection Conn
{
get
{
MySqlConnection connection = new MySqlConnection(ConstValue.DBConnectionString);
return connection;
}
} public static MySqlConnection CreateConnection()
{
return Conn;
}
}

这样就解决了并发访问的时候出现的问题了。

踩过的坑,纪录下来就是成长。

欢迎关注微信公众平台:上帝派来改造世界的人

MySqlConnection 并发连接的问题

MySqlConnection 并发连接的问题的更多相关文章

  1. C#多线程环境下调用 HttpWebRequest 并发连接限制

    C#多线程环境下调用 HttpWebRequest 并发连接限制 .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 win ...

  2. 【原创】高性能网络编程(二):上一个10年,著名的C10K并发连接问题

    1.前言 对于高性能即时通讯技术(或者说互联网编程)比较关注的开发者,对C10K问题(即单机1万个并发连接问题)应该都有所了解."C10K"概念最早由Dan Kegel发布于其个人 ...

  3. 多线程调用HttpWebRequest并发连接限制

    .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows  7 下默认是2,在服务器操作 ...

  4. 大并发连接的oracle在Linux下内存不足的问题的分析

    大并发连接的oracle在Linux下内存不足的问题的分析 2010-01-28 20:06:21 分类: Oracle 最近一台装有Rhel5.3的40G内存的机器上有一个oracle数据库,数据库 ...

  5. (五)通过Python的select监控多个描述符实现并发连接

    概述 本文通过使用select改写之前的服务器程序通过监控多个套接字描述符来实现并发连接并加入了一些机制让程序更加健壮,不过我们所有的实验都是建立在单词发送数据不会超过1024字节,如果超过你需要做特 ...

  6. Nginx 限制并发连接和并发请求数配置

    Nginx限制并发连接和并发请求数配置   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 配置介绍 查看是否内置模块 # pwd /mnt/nginx-1.10.0 ...

  7. httpclient的并发连接问题

    昨天的搜索系统又出状况了,几个库同时重建索引变得死慢.经过一个上午的复现分析,确定问题出现httpclient的使用上(我使用的是3.1这个被广泛使用的遗留版本).搜索系统在重建索引时,是并发多个线程 ...

  8. 【转】C#多线程环境下调用 HttpWebRequest 并发连接限制

    .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows  7 下默认是2,在服务器操作 ...

  9. C10K并发连接_转

    转载:http://blog.csdn.net/wangtaomtk/article/details/51811011 1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小 ...

随机推荐

  1. JAVA实现Excel的读写--jxl

    前段时间因为开发网站的需要,研究了一下java实现excel的读写,一般当我们做管理软件时,都需要打印报表,报表如何制作呢?相信一定难为过大家,本篇就为大家揭开它的神秘面纱,学习完半篇,你一定会对报表 ...

  2. Django model 中meta options

    之前学了abstract,这是后续的一些options app_label: app_label的作用是:如果一个model定义不在INSTALLED_APPS中,那么此时就需要声明,这个model的 ...

  3. 如何循环遍历document.querySelectorAll()方法返回的结果

    使用JavaScript的forEach方法,我们可以轻松的循环一个数组,但如果你认为document.querySelectorAll()方法返回的应该是个数组,而使用forEach循环它: /* ...

  4. LeetCode_Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  5. hadoop搭建开发环境及编写Hello World

    hadoop搭建开发环境及编写Hello World   本文地址:http://www.cnblogs.com/archimedes/p/hadoop-helloworld.html,转载请注明源地 ...

  6. activity的android:name所指的Activity实现类的简写问题

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package=" ...

  7. html&plus;css3实现长方体效果

    网上大都是正方体的效果,由于做一个东西需要,写了一个HTML+css3实现的长方体,有需要的也可以看看.                   2017-07-25         21:30:23 h ...

  8. Java线程状态Jstack线程状态BLOCKED&sol;TIMED&lowbar;WAITING&sol;WAITING解释

    一.线程5种状态 新建状态(New) 新创建了一个线程对象. 就绪状态(Runnable) 线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获 ...

  9. 【SpringData学习】

    1.注解@Modifying 在springData中,大部分给出的接口都是查询的,那要进行删除和更新的时候,大部分都需要使用@Query 进行手写代码.并且需要使用@Modifying注解. 使用场 ...

  10. 几种常见的开源软件许可协议(GPL&comma; LGPL&comma; Apache License&comma; BSD&rpar;

    GPL GPL授予程序接受人以下权利,或称“*”: * 以任何目的运行此程序的* * 以学习程序工作机理为目的,对程序进行修改的*(能得到源代码是前提) * 再发行复制件的* * 改进此程序, ...