zoukankan      html  css  js  c++  java
  • C#数据库连接池 [转]

    using System.Data.SqlClient;
    using System.Collections;
    /// <summary>
    /// ConnectionPool 的摘要说明
    /// </summary>
    public class ConnectionPool
    {
        private static ConnectionPool cpool = null;//池管理对象
        private static Object objlock = typeof(ConnectionPool);//池管理对象实例
        private int size = 10;//池中连接数
        private int useCount = 0;//已经使用的连接数
        private ArrayList pool = null;//连接保存的集合
        private String ConnectionStr = "";//连接字符串

        public ConnectionPool()
     {
      //
      // TODO: 在此处添加构造函数逻辑
      //
            ConnectionStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            size = 100;
            pool = new ArrayList();
        }

     //创建获取连接池对象
        public static ConnectionPool getPool()
        {
            lock (objlock)
            {
                if (cpool == null)
                {
                    cpool = new ConnectionPool();
                }
                return cpool;
            }
     }
        //获取池中的连接
        public SqlConnection getConnection()
        {
            lock (pool)
            {
                SqlConnection tmp = null;
                if (pool.Count > 0)
                {
                    tmp = (SqlConnection)pool[0];
                    pool.RemoveAt(0);
                    //不成功
                    if (!isUserful(tmp))
                    {
                        //可用的连接数据已去掉一个
                        useCount--;
                        tmp = getConnection();
                    }
                }
                else
                {
                    //可使用的连接小于连接数量
                    if (useCount < size)
                    {
                        try

    {
                            //创建连接
                            SqlConnection conn = new SqlConnection(ConnectionStr);
                            conn.Open();
                            useCount++;
                            tmp = conn;
                        }
                        catch (Exception e)
                        {
                        }
                    }
                }
                return tmp;
            }
        }
        //关闭连接,加连接回到池中
        public void closeConnection(SqlConnection con)
        {
            lock (pool)
            {
                if (con != null)
                {
                    pool.Add(con);
                }
            }
        }
        //目的保证所创连接成功,测试池中连接
        private bool isUserful(SqlConnection con)
        {
           //主要用于不同用户
            bool result = true;
            if (con != null)
            {
                string sql = "select 1";//随便执行对数据库操作
                SqlCommand cmd = new SqlCommand(sql, con);
                try
                {

     {
                    cmd.ExecuteScalar().ToString();
                }
                catch
                {
                    result = false;
                }

            }
            return result;
        }


    }


    //使用连接后的连接获取方法
    //获取连接时,就不用创建连接直接从池中获取数据
            string strsql = "select * from Chapter";
            SqlDataAdapter sqldap = new SqlDataAdapter(strsql, ConnectionPool.getPool().getConnection());
            DataSet set = new DataSet();
            sqldap.Fill(set);
            GridView1.DataSource = set.Tables[0].DefaultView;
            GridView1.DataBind();

  • 相关阅读:
    学习使用资源文件[4] 用资源中的图片做背景、使用 LoadFromResourceID
    WinAPI: ShellExecute 打开外部程序或文件
    学习使用资源文件[8] 关于 HInstance
    学习使用资源文件[3] 用 Image 显示资源中的图片
    薛定谔之猫_百度百科
    美国创业公司招聘工程师
    Two star programming
    vector 自定义排序
    Data Structures, Algorithms, & Applications in Java Suffix Trees
    Three Star Programmer
  • 原文地址:https://www.cnblogs.com/llkey/p/3689122.html
Copyright © 2011-2022 走看看