C#数据库连接池 MySql SqlServer

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

1. 建立线程池

  1 using MySql.Data.MySqlClient;
  2 using System;
  3 using System.Collections;
  4 using System.Collections.Generic;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Threading.Tasks;
  8
  9 namespace LianJieChiTest
 10 {
 11     public class ConnectionPool
 12     {
 13         private static ConnectionPool cpool = null;//池管理对象
 14         private static Object objlock = typeof(ConnectionPool);//池管理对象实例
 15         private int size = 100;//池中连接数
 16         private int useCount = 0;//已经使用的连接数
 17         private ArrayList pool = null;//连接保存的集合
 18         private String ConnectionStr = "";//连接字符串
 19
 20         public ConnectionPool()
 21         {
 22             //数据库连接字符串
 23             ConnectionStr = "server=localhost;User ID=zhy;Password=123456;database=lianjietest;";
 24             //创建可用连接的集合
 25             pool = new ArrayList();
 26         }
 27
 28         //创建获取连接池对象
 29         public static ConnectionPool getPool()
 30         {
 31             lock (objlock)
 32             {
 33                 if (cpool == null)
 34                 {
 35                     cpool = new ConnectionPool();
 36                 }
 37                 return cpool;
 38             }
 39         }
 40         //获取池中的连接
 41         public MySqlConnection getConnection()
 42         {
 43             lock (pool)
 44             {
 45                 MySqlConnection tmp = null;
 46                 //可用连接数量大于0
 47                 if (pool.Count > 0)
 48                 {
 49                     //取第一个可用连接
 50                     tmp = (MySqlConnection)pool[0];
 51                     tmp.Open();
 52                     //在可用连接中移除此链接
 53                     pool.RemoveAt(0);
 54                     //不成功
 55                     if (!isUserful(tmp))
 56                     {
 57                         //可用的连接数据已去掉一个
 58                         useCount--;
 59                         tmp = getConnection();
 60                     }
 61                 }
 62                 else
 63                 {
 64                     //可使用的连接小于连接数量
 65                     if (useCount <= size)
 66                     {
 67                         try
 68                         {
 69                             //创建连接
 70                             MySqlConnection conn = new MySqlConnection(ConnectionStr);
 71                             conn.Open();
 72                             //可用的连接数加上一个
 73                             useCount++;
 74                             tmp = conn;
 75                         }
 76                         catch (Exception e)
 77                         {
 78                         }
 79                     }
 80                 }
 81                 return tmp;
 82             }
 83         }
 84         //关闭连接,加连接回到池中
 85         public void closeConnection(MySqlConnection con)
 86         {
 87             lock (pool)
 88             {
 89                 if (con != null)
 90                 {
 91                     //将连接添加在连接池中
 92                     pool.Add(con);
 93                 }
 94             }
 95         }
 96         //目的保证所创连接成功,测试池中连接
 97         private bool isUserful(MySqlConnection con)
 98         {
 99             //主要用于不同用户
100             bool result = true;
101             if (con != null)
102             {
103                 string sql = "select 1";//随便执行对数据库操作
104                 MySqlCommand cmd = new MySqlCommand(sql, con);
105                 try
106                 {
107                     cmd.ExecuteScalar().ToString();
108                 }
109                 catch
110                 {
111                     result = false;
112                 }
113
114             }
115             return result;
116         }
117     }
118 }

2. 使用

 1 MySqlConnection conn = null;
 2             for (int i = 1; i <= 100; ++i)
 3             {
 4                 //获取连接
 5                 conn = ConnectionPool.getPool().getConnection();
 6                 try
 7                 {
 8                     //连接为null等待空闲连接
 9                     while (conn == null)
10                     {
11                     }
12                     //数据操作
13                     MySqlCommand cmd = new MySqlCommand("Select * from zhy_testLianJie", conn);
14                     MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
15                     while (dr.Read())
16                     {
17                         Console.WriteLine("ID:" + dr[0] + ",姓名:" + dr[1]);
18                     }
19                     //关闭连接
20                     conn.Close();
21                     //将连接添加回连接池中
22                     ConnectionPool.getPool().closeConnection(conn);
23                 }
24                 catch (Exception ex)
25                 {
26                     Console.WriteLine("\n异常信息:\n{0}", ex.Message);
27                     break;
28                 }
29             }

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

时间: 2024-10-29 13:31:53

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

Python实现Mysql数据库连接池

python连接Mysql数据库: Python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接MySQL数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的. python的数据库连接池包 DBUtils: DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装.DBUtils来

MySql数据库连接池

1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行  (3).项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式. 2.采用连接池(示意图) 3.开源数据库连接池 (1).现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了Da

Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库

在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/ConnectionPool" auth="Application" type="javax.sql.DataSour

swoole编译安装/数据库连接池/异步mysql客户端

一.编译安装php5.6 0.安装必要软件 http://www.cnblogs.com/itfenqing/p/6055138.html 1.下载php5.6.30 http://php.net/downloads.php 2.解压 3.编译时指定为mysqlnt,启用opcache ./configure --prefix=/usr/local/php56 --enable-fpm --enable-mysqlnd --with-mysqli=mysqlnd --with-mysql=mys

DBCP数据库连接池连接mysql数据库的时候 出现连接问题

在部署的项目的时候发现两个问题 ,第一个问题不是太容易发现 ,因为我部署的时候没问题 ,但是产品的同事在跑流程的时候总是出现一个connetException异常  自己看了半天没发现什么问题 去网上查了一下 说是msql的连接默认是八个小时 第二个问题就是 自己这边的数据库 隔一段时间不用的话 会自动断开  查了一下资料 是dbcp连接mysql时出现的这个问题  实际上两个问题算是一个问题吧 自己配置了一下 这几天没报这样的错误 !算是解决了吧!  <bean id="dataSour

mysql笔记八——开源数据库连接池DBCP和C3P0的使用

DBCP数据库连接池 DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池来实现的.该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用. 核心代码 static{ InputStream in = JdbcUtil.class.getClassLoader(). get

Java-自定义简单的mysql数据库连接池

   当我们在使用java连接数据库的时候,要注册驱动,.再通过"驱动管理器"获取连接对象(Connection),当我们的程序被很多用户访问的时候,每次都创建一个Connection连接对 象的时候,程序会变得特别卡,这时候我们可以通过数据库连接池来解决这个问题. 用连接池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connection后,调 用Connecti

MySql 数据库连接池

最近发布的一个项目总是无缘无故的断线,在IIS机器上直接浏览也不会出现黄页面,就是一直加载,最后断线. 重启IIS后恢复正常. 经过几次后,查看了IIS日志和WINDOWS日志,在WINDOWS日志中发现错误信息如下: <Data>error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred b

mysql(七)数据库连接池

什么是数据库连接池 数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放 数据库连接池的运行机制 (1) 程序初始化时创建连接池(2) 使用时向连接池申请可用连接(3) 使用完毕,将连接返还给连接池(4) 程序退出时,断开所有连接,并释放资源 开源数据库连接池 1 dbcp dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池这个