查阅了一天的资料来学习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. 基于mysql数据库 关于sql优化的一些问题

    mysql数据库有一个explain关键词,可以对select语句进行分析并且输出详细的select执行过程的详细信息. 对sql explain后输出几个字段: id:SELECT查询的标识符,每个 ...

  2. ARM Linux 3.x的设备树(Device Tree)(转)

    http://blog.csdn.net/21cnbao/article/details/8457546

  3. tornado框架基础02-输入和输出

    01 输出 write bytes类型 class IndexHandler(tornado.web.RequestHandler): def get(self): self.write(b'Torn ...

  4. mac下出现xcrun: error导致git无法使用的解决办法

    xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun BY  ...

  5. Couchbase IV(管理与维护)

    Couchbase IV(管理与维护) 管理 常用命令 Command Description server-list List all servers in a cluster server-inf ...

  6. PHPTaint-检测xss/sqli/shell注入的php扩展模块[转]

    web渗透者习惯采用黑盒或灰盒的方面来检测一款web应用是否存在漏洞,这种检测方法可以屏蔽不少漏洞,特别是程序逻辑中的漏洞.但如果能配合白盒的源码审计(也可以叫漏洞挖掘),效果将会更好,当然人力成本也 ...

  7. mybatis自动映射和手动映射

    一对一查询 第一种方法: <!-- 查询所有订单信息 --> <select id="findOrdersList" resultType="cn.it ...

  8. JAVA自定义监听器的示例代码

    JAVA用户自定义事件监听完整例子 JAVA用户自定义事件监听完整例子- —sunfruit     很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整 ...

  9. 如何打开Oracle的dmp文件

    在工作中经常使用到别人提供过来的dmp文件,由于不知道备份时所用的用户名,这样就不能恢复. 通过打开DMP文件可以查看到备份时使用的用户名. 1.如果dmp文件比较小,用文本编辑器打开就可以了. 2. ...

  10. java Web项目Service层通用接口和entityVo对象与entity对象转化问题的解决方案

    Service层的接口中有一些比较常用方法,一次又一次的在新的Service层中被书写,所以懒惰的程序员又烦了,他们决定写个通用接口来解决这个问题. 有些项目中,实体类即承担接收表单数据的任务,又承担 ...