首页 > 代码库 > 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 }
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”,希望可以帮助到大家
C#数据库连接池 MySql SqlServer
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。