这是给对象赋值的代码        con.ConnectionString = strConnectionString;
        cmd.Connection = con;
        cmd.CommandType = cmdType;
        cmd.CommandText = cmdText;
        if (cmdParms != null)
        {
            foreach (SqlParameter parm in cmdParms)
                cmd.Parameters.Add(parm);
        }
这是执行ExecuteNonQuery()的代码        using (SqlConnection con = new SqlConnection())
        {
            SqlCommand cmd = new SqlCommand();
            PreCmd(con, cmd, cmdType, cmdText, cmdParms);
            int iReturn = -1;            try
            {
                con.Open();
                iReturn = cmd.ExecuteNonQuery();
            }
            catch(Exception ee)
            {
                throw ee;
            }
            finally
            {
                con.Close();
            }            return iReturn;
        }
现在让我很郁闷的是执行完数据库操作之后用SQL Management Studio查看数据库,总是会留有活动连接。请问怎样才能彻底断开活动连接。

解决方案 »

  1.   

     再catch里面也先关闭数据库连接
      

  2.   

    关键是在没有抛出错误的情况下怎么彻底关闭SQL活动连接。
      

  3.   

    catch(Exception ee)
                {
                    con.Close()
                    throw ee;
                }
                finally
                {
                    if(con.State == ConnectionState.Open)
                    con.Close();
                }
      

  4.   

    我想可能跟.Net采用连接池对数据库连接进行管理有关吧
    如果连接池值 Pooling 设置为 true 或 yes,则基础连接将返回到连接池。如果 Pooling 设置为 false 或 no,则实际上会关闭到服务器的基础连接
    string connectionString="Data Source=MSSQL1;Pooling=false;...";如上pooling=false表示不使用连接池,则Close()时,连接将立即销毁
    pooling=true时连接保存至连接池中,有效期内没有使用就销毁,有效期默认30分钟
      

  5.   

    另外提个小问题,楼主用了 using (SqlConnection con = new SqlConnection())内部又包括了finally
                {
                    con.Close();
                }
    很明显下面的是多余的,这叫代码冗余
      

  6.   

    还有服务器端也要注意
    我以前使用MySql的时候,客户端连接关闭后,但在服务器命令行模式下查看,MySql的连接仍然存在,它是这样处理的:当一个连接请求到来时,检查已存在的连接是否有连接字符串完全一样的,有,则调用存在的连接,一段时间内保存的这个连接没有活动时,再废之,这个默认时间是30分钟,可以自己设置.
    也就是说,一个新的连接请求到来时,哪怕客户端Close()了,MySql也会让它存活30分钟,以利再用,这就是数据库服务器的连接池管理
      

  7.   

    用using段可以自动关闭连接吗?