SqlDataReader对象没有关闭在建立SqlDataReader的时候用:
My_cmd.ExecuteReader(CommandBehavior.CloseConnection)方法在用完SqlDataReader后,一定要显式关闭SqlDataReader对象,Connection对象就不用显式关了

解决方案 »

  1.   

    public class Sql_db {
    static string Sqlconnstr=ConfigurationSettings.AppSettings["My_sql_masterefu"];
    public void Exec(string Sql_str) {
    using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
    { //没有返回的SQL执行
    Conn.Open();
    SqlCommand My_cmd = new SqlCommand(Sql_str, Conn);
    My_cmd.ExecuteNonQuery();
    }
    }
    public SqlDataReader Exec_dr(string Sql_str) {

    using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
    {
    Conn.Open();
    SqlCommand My_cmd = new SqlCommand(Sql_str, Conn);
    return My_cmd.ExecuteReader();
    }

    }
    public DataTable Exec_dt(string Sql_str) {
    using(SqlConnection Conn = new SqlConnection(Sqlconnstr))
    {
    DataSet ds = new DataSet();
    SqlDataAdapter dap = new SqlDataAdapter(Sql_str,Conn);
    dap.Fill(ds);
    dap.Dispose();
    return ds.Tables[0];
    } }
    }
      

  2.   

    数据库链接是一种危险的、昂贵的、有限的资源,特别是在多层Web应用程序中。你必须正确管理你的链接,因为你的方法将极大的影响应用程序的整体升级性.
    如果不使用连接池管理,你的每一个连接数据库都会为此连接开一个进程,当连接数量多的时候,数据库DataBase Server的压力可想而知。而使用连接池管理,数据库最多只接受当前设定的最大请求值,其它的请求先进入队列中排队,效率会行到很大提升。建议做法:
    使用连接池管理
    较晚地打开数据库链接,而较早地关闭它们
    使用存储过程
      

  3.   

    问题找到了,因为在项目中很多是使用存储过程的。但没有把Conn.Close();掉。认为页面Page_Unload 会一起关闭。所以就出现了很多的连接等待进程。经过这次,知道了一些资源应该手动的去释放。自动垃圾回收靠不住的说!谢谢2位回复。明天结帖