当前位置:编程学习 > C#/ASP.NET >>

请教一个关于静态SqlConnection的问题

大家好,在SqlHelper里面加了一个属性:
public static SqlConnection DefaultConnection
{
    get
       {
            if (string.IsNullOrEmpty(connstr)) { connstr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123;"; }
             return new SqlConnection(connstr);
        }
  }

网站中需要用到连接的都是这样写的:
using(SqlConnection conn=SqlHelper.DefaultConnection){
     
}

目前网站有时出现:超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
多次查询了项目,所有连接都有关闭了,现在请教下大家,是不是因为写成静态属性的原因呢?
这样写只是方便调用,但属性里面确实是返回的一个新的连接对象 new SqlConnection(connstr),不是很明白底层的原理,请教高手指点下。谢谢! --------------------编程问答-------------------- 你虽然定义静态属性了,但是每次调用其实都是重新new SqlConnection(connstr); --------------------编程问答-------------------- 实质还是每次都动态创建一个SqlConnection --------------------编程问答--------------------
引用 1 楼 gxingmin 的回复:
你虽然定义静态属性了,但是每次调用其实都是重新new SqlConnection(connstr);

楼上大哥的意思是并不是这个写法导致这种错误的出现吗?请问以前的连接对象在using 后有没有释放掉呢? --------------------编程问答--------------------
引用 2 楼 gxingmin 的回复:
实质还是每次都动态创建一个SqlConnection

静态类里先new SqlConnection()
最后再return 会好点? --------------------编程问答-------------------- using里你保证在最后conn.Close了就可以了,释放using会替你释放 --------------------编程问答--------------------
引用 5 楼 gxingmin 的回复:
using里你保证在最后conn.Close了就可以了,释放using会替你释放


用了using 就不用管conn.close()了吧,我在SqlHelper都加了这样一些方法,麻烦帮我看下有没有问题:
public static SqlDataReader ReturnReader(CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {
            using (SqlConnection conn = DefaultConnection)
            {
                return ExecuteReader(conn, cmdType, cmdText, cmdParms);//直接调用微软SqlHelper的方法
            }

        } --------------------编程问答-------------------- using只管给Dispose()
Close()需要你手动写 --------------------编程问答-------------------- 要手动close掉吧,如果有这样的话,一般是不会出现超时,连接池满的问题吧 --------------------编程问答-------------------- 不知道各位大神sqlconnection是用完一次就close还是怎么处理 --------------------编程问答--------------------
引用 7 楼 gxingmin 的回复:
using只管给Dispose()
Close()需要你手动写

一直认为使用using会先close之后dispose --------------------编程问答--------------------
引用 9 楼 xiaogui340 的回复:
不知道各位大神sqlconnection是用完一次就close还是怎么处理

反正我是用完就关闭的 --------------------编程问答--------------------  private static SqlConnection conn = null;
       /// <summary>
       /// 获取连接字符串
       /// </summary>
       private static string ConnectionString
       {
           get
           {
               string _conn = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString.ToString();
               return _conn;
           }
       }
       /// <summary>
       /// 返回SqlConnection数据连接对象实例
       /// </summary>
       public static SqlConnection Conn
       {
           get
           {
               string sqlconn = ConnectionString;
               if (conn == null)
               {
                   conn = new SqlConnection(sqlconn);
                   conn.Open();
               }
               else if (conn.State == System.Data.ConnectionState.Closed)
               { conn.Open(); 
               }
               else if (conn.State == System.Data.ConnectionState.Broken)
               {
                   conn.Close();
                   conn.Open();
               }
               return conn;
           }
       }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,