C#数据库连接池 MySql SqlServer
查阅了一天的资料来学习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的更多相关文章
- c3p0数据库连接池+mysql数据库基本使用方法
一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒), 连接就会被自动释放掉. ...
- MySQL 并发测试中,线程数和数据库连接池的实验
我一直以来,对性能测试中,连接池的大小要如何配置,不是太清楚: 就我所知道的,就DB自带对连接数的限制,在sqlserver中用select @@connection 可以查到, 在代码中,可以配置D ...
- 一个简单的MySql数据库连接池的实现
package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...
- Java数据库连接池的几种配置方法(以MySQL数据库为例)
Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...
- MySql数据库连接池
1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...
- Python实现Mysql数据库连接池
python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...
- mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息
1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息 有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段 ...
- mysql数据库连接池使用(二)实现自己的数据库连接池
上一个章节,我们讲了xml文件的解析框架XMLConfiguration的使用,不懂的可以参考 Apache Commons Configuration读取xml配置具体使用. 这个章节主要实现自己的 ...
- mysql数据库连接池使用(一)dbcp方式的配置
Apache的数据库连接池 DBCP的常用配置说明,因为项目中用到了需要对其封装,所以必须先了解怎么配置以及各个配置字段的含义,理解的基础上开发我们自己的数据库连接池.可以参考官网dbcp官网. db ...
随机推荐
- POJ-1002-487-3279(字符串)
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 309685 Accepted: 55292 Descripti ...
- [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
https://www.luogu.org/problemnew/show/P2886 给定无向连通图,求经过k条边,s到t的最短路 Floyd形式的矩阵乘法,同样满足结合律,所以可以进行快速幂. 离 ...
- Ubuntu 和 centos7 服务的启动
Ubuntu 下: /etc/init.d/nginx start | stop | reload Centos7下: service nginx start | stop | reload
- 【练习】reserving.kr 之imageprc write up
补充:c++ builder 与 windows API经典范例 #include <vcl.h> #pragma hdrstop #include "Unit1.h" ...
- SQLServer__问题记录
“备份集中的数据库备份与现有的xx数据库不同” 参考链接: http://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html RESTOR ...
- c#导出word文档
为方便下次遇到不知道去哪找先把它存放在这里,以下是保存导出word主要类方法 public class BiultReportForm { /// <summary>word 应用对象 & ...
- OO博客作业
第一次多项式的作业感觉还行,同时用c和java写的话也算是一个从c到java的过渡,也算是有了对 java的初步认识,之后的电梯作业出血了一些小BUG,比如有些情况考虑不完善之类的,也算是对面向对象有 ...
- Idea中配置svn时报 Can't use Subversion command line client: svn.Errors found while svn working copies detection.
https://www.cnblogs.com/wqh17/p/6881483.html
- spring的IOC和DI
https://blog.csdn.net/fuzhongmin05/article/details/55802816 (1)IOC:控制反转,把对象创建交给spring进行配置 (2)DI:依赖注入 ...
- python018 Python3 输入和输出
Python3 输入和输出在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能.本章节我们将具体介绍 Python 的输入输出. 输出格式美化Python两种输出值的方式: 表达式语句 ...