private static IList<SqlConnection> connection = new List<SqlConnection>();        public static SqlConnection Connection
        {
            get
            {
                string connectionString = ConfigurationSettings.AppSettings["connectstr"];
                int a = 0;
                if (connection.Count == 0)
                {
                    for (int i = 0; i < 10; i++)
                    {
                        SqlConnection sqlcon = new SqlConnection(connectionString);
                        sqlcon.Open();
                        connection.Add(sqlcon);
                    }
                }
                else
                {
                    for (; a < connection.Count; a++)
                    {
                        if (connection[a].State == System.Data.ConnectionState.Closed)
                        {
                            connection[a].Open();
                            break;
                        }
                        else if (connection[a].State == System.Data.ConnectionState.Broken)
                        {
                            connection[a].Close();
                            connection[a].Open();
                            break;
                        }
                    }
                    if (a == connection.Count && a < 50)
                    {
                        SqlConnection sqlcon = new SqlConnection(connectionString);
                        sqlcon.Open();
                        connection.Add(sqlcon);
                    }
                }
                return connection[a];
            }
        }自己想的将数据库连接放到list里面
刚写出来
请各位指点下
哪里不对还烦请指出来并提供改进的方案哈

解决方案 »

  1.   

    后面当a=50的时候应该是会返回个null
    问题在于该怎么该才好
    劳烦各位
      

  2.   

    using(sqlconnection con = new sqlconnection(constr))
    {
      //do something
    }
    你的实现是想做个线程池,但是这么处理实际上是被你自己限制了程序的并发能力.
      

  3.   

    后面当a=50的时候应该是会返回个null 的话,你把private static IList 定义成private void Ilist 可以使用Application事件或Session事件来实现下啊!
      

  4.   

    你的这个list限制的范围是10-50? if (connection.Count == 0) 
                    { 
                        for (int i = 0; i < 10; i++) 
                        { 
                            SqlConnection sqlcon = new SqlConnection(connectionString); 
                            sqlcon.Open(); 
                            connection.Add(sqlcon); 
                        } 
                    } 
    第一次请求连接的时候,你创建10个后,全都打开啊?
    是不是你的应用要求这样,如果不是必须,还是只打开一个,返回吧。