我的项目是 asp.net的,数据库底层使用Sql,但是在网站发布后使用using(.....){.....}或者connection.Close()这种方法关闭数据库连接往往关不掉,很容易网站就因连接池超限而瘫痪,这是为什么呢?有什么好的解决方法呢!?

解决方案 »

  1.   

    是不是你设成了static 或datareader没关
      

  2.   

    把Max Pool Size配置大点吧,这个默认是100,将连接超时时间设置长些,默认15称,如果超出,则会出现等待,可能出现连接超时,看你的服务器性能了并不是using和conn.Close没用,这两个操作只是把你的连接返回给连接池而已,服务器并不会注销这个连接
      

  3.   

    public static int ExecuteCommand(string sql)
        {
            using (SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection()))
            {
                connection.Open();
                using (SqlCommand cmd = new SqlCommand(sql, connection))
                {
                    return Convert.ToInt32(cmd.ExecuteNonQuery());
                }
                connection.Close();
            }
        }我把代码贴一下  突然发现 这是不是因为在close()之前已经return了,所以关闭连接这就没走!
      

  4.   

    你可以使用数据库底层操作类
    DbHelper数据操作类
      

  5.   

    public static int ExecuteCommand(string sql)
      {
      using (SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection()))
      {
      connection.Open();
      using (SqlCommand cmd = new SqlCommand(sql, connection))
      {
      return Convert.ToInt32(cmd.ExecuteNonQuery());
      }
      connection.Close();
      }
      }我把代码贴一下 突然发现 这是不是因为在close()之前已经return了,所以关闭连接这就没走!
      

  6.   

    设置成了  static为什么会有这个影响呢?求教
      

  7.   

    static 常驻内存,自然不会关闭数据库连接,也就是说,你new过10个static的连接 那这个10个连接就一直开着,直到你关闭程序为止。注意,是关闭程序,不是页面。
      

  8.   

    public static int ExecuteCommand(string sql)
      {
      int reval=0
      using (SqlConnection connection = new SqlConnection(GetConnection.GetSqlConnection()))
      {
      connection.Open();
      using (SqlCommand cmd = new SqlCommand(sql, connection))
      {
      reval=Convert.ToInt32(cmd.ExecuteNonQuery());
      }
      connection.Close();
      return reval
      }最后return 
      

  9.   

    各位。使用了using 就跟return无关了。
    就算不写关闭,connection 一样会自动close。
    uisng的作用就是自动关闭,包括出现异常也能关闭。
      

  10.   

    和return是没有关系的,using相当于try{}catch{}finally{connection.Dispose();}无论块是如何退出的,using子句都会确保关闭数据库连接。
    查看一下连接类的Dispose()方法的IL代码,它们都检查连接对象的当前状态,如果其状态为打开,就调用Close()方法。
      

  11.   

    呵呵   出了问题以后再看这的代码   居然是这么写的,太可怕了!问题已解决!我也是这么改的 的确跟return有点关系!