查阅了一天的资料来学习MySql数据库连接池,终于在一篇博文上找到了,自己也整理了一下,希望对大家有用处

1. 建立连接池

 using MySql.Data.MySqlClient;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace LianJieChiTest
{
public class ConnectionPool
{
private static ConnectionPool cpool = null;//池管理对象
private static Object objlock = typeof(ConnectionPool);//池管理对象实例
private int size = ;//池中连接数
private int useCount = ;//已经使用的连接数
private ArrayList pool = null;//连接保存的集合
private String ConnectionStr = "";//连接字符串 public ConnectionPool()
{
//数据库连接字符串
ConnectionStr = "server=localhost;User ID=root;Password=123456;database=test;";
//创建可用连接的集合
pool = new ArrayList();
} #region 创建获取连接池对象
public static ConnectionPool getPool()
{
lock (objlock)
{
if (cpool == null)
{
cpool = new ConnectionPool();
}
return cpool;
}
}
#endregion #region 获取池中的连接
public MySqlConnection getConnection()
{
lock (pool)
{
MySqlConnection tmp = null;
//可用连接数量大于0
if (pool.Count > )
{
//取第一个可用连接
tmp = (MySqlConnection)pool[];
//在可用连接中移除此链接
pool.RemoveAt();
//不成功
if (!isUserful(tmp))
{
//可用的连接数据已去掉一个
useCount--;
tmp = getConnection();
}
}
else
{
//可使用的连接小于连接数量
if (useCount <= size)
{
try
{
//创建连接
tmp = CreateConnection(tmp);
}
catch (Exception e)
{
}
}
}
//连接为null
if (tmp == null)
{
//达到最大连接数递归调用获取连接否则创建新连接
if (useCount <= size)
{
tmp = getConnection();
}
else
{
tmp = CreateConnection(tmp);
}
}
return tmp;
}
}
#endregion #region 创建连接
private MySqlConnection CreateConnection(MySqlConnection tmp)
{
//创建连接
MySqlConnection conn = new MySqlConnection(ConnectionStr);
conn.Open();
//可用的连接数加上一个
useCount++;
tmp = conn;
return tmp;
}
#endregion #region 关闭连接,加连接回到池中
public void closeConnection(MySqlConnection con)
{
lock (pool)
{
if (con != null)
{
//将连接添加在连接池中
pool.Add(con);
}
}
}
#endregion #region 目的保证所创连接成功,测试池中连接
private bool isUserful(MySqlConnection con)
{
//主要用于不同用户
bool result = true;
if (con != null)
{
string sql = "select 1";//随便执行对数据库操作
MySqlCommand cmd = new MySqlCommand(sql, con);
try
{
cmd.ExecuteScalar().ToString();
}
catch
{
result = false;
} }
return result;
}
#endregion
}
}

2. 使用

 MySqlConnection conn = null;
for (int i = ; i <= ; ++i)
{
//获取连接
conn = ConnectionPool.getPool().getConnection();
try
{
//数据操作
MySqlCommand cmd = new MySqlCommand("Select * from zhy_testLianJie", conn);
MySqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Console.WriteLine("ID:" + i + ",姓名:" + dr[]);
}
dr.Close();
//将连接添加回连接池中
ConnectionPool.getPool().closeConnection(conn);
}
catch (Exception ex)
{
Console.WriteLine("\n异常信息:\n{0}", ex.Message);
break;
}
}

这里是MySql的使用方法,SqlServer与之相差就是去掉所有对象的“My”,希望可以帮助到大家

C#数据库连接池 MySql SqlServer的更多相关文章

  1. c3p0数据库连接池+mysql数据库基本使用方法

           一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒), 连接就会被自动释放掉. ...

  2. MySQL 并发测试中,线程数和数据库连接池的实验

    我一直以来,对性能测试中,连接池的大小要如何配置,不是太清楚: 就我所知道的,就DB自带对连接数的限制,在sqlserver中用select @@connection 可以查到, 在代码中,可以配置D ...

  3. 一个简单的MySql数据库连接池的实现

    package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...

  4. Java数据库连接池的几种配置方法(以MySQL数据库为例)

    Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...

  5. MySql数据库连接池

    1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...

  6. Python实现Mysql数据库连接池

    python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

  7. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息

    1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息 有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段 ...

  8. mysql数据库连接池使用(二)实现自己的数据库连接池

    上一个章节,我们讲了xml文件的解析框架XMLConfiguration的使用,不懂的可以参考 Apache Commons Configuration读取xml配置具体使用. 这个章节主要实现自己的 ...

  9. mysql数据库连接池使用(一)dbcp方式的配置

    Apache的数据库连接池 DBCP的常用配置说明,因为项目中用到了需要对其封装,所以必须先了解怎么配置以及各个配置字段的含义,理解的基础上开发我们自己的数据库连接池.可以参考官网dbcp官网. db ...

随机推荐

  1. ios之UITableView

    今天要分享的是IOS开发中一个使用率非常高的一个控件-------UITableView,这两天正在使用tableview做信息的显示,在写代码时对tableview和tableviewcell的几种 ...

  2. Navicat Premium 12试用期的破解方法

    参考:https://blog.csdn.net/Jason_Julie/article/details/82864187 已测可用

  3. Shell转大写为小写

    #!/bin/bash # read a a=$(echo "$a" | awk '{print tolower($0)}') #转大写为小写 if [[ $a = 'y' || ...

  4. <Spring Data JPA>二 Spring Data Jpa

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

  6. js事件默认行为

    事件默认行为: 当一个事件发生的时候浏览器自己默认做的事情 怎么阻止? 当前这个行为是什么事件触发的,然后在这个事件的处理函数中使用 return false; 但是return false 阻止的是 ...

  7. 条款9:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction)

    NOTE:在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)

  8. LeetCode(14)Longest Common Prefix

    题目 Write a function to find the longest common prefix string amongst an array of strings. 分析 该题目是求一个 ...

  9. python基础——3(流程控制)

    一.if判断 1.语法一: if 条件: 子代码块 示例代码: sex = 'female' age = 18 is_beautiful = True if sex == 'female' and a ...

  10. coraldraw快捷键

        显示导航窗口(Navigator window) [N] 运行 Visual Basic 应用程序的编辑器 [Alt]+[F11]  保存当前的图形 [Ctrl]+[S]  打开编辑文本对话框 ...