首页 > 代码库 > C#数据库连接池 MySql SqlServer

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                 try106                 {107                     cmd.ExecuteScalar().ToString();108                 }109                 catch110                 {111                     result = false;112                 }113 114             }115             return result;116         }117     }118 }
View Code

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             }
View Code

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

 

C#数据库连接池 MySql SqlServer