SqlHelper.cspublic static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                conn.Close();
                throw;
            }
        }==========================
在index.aspx.cs里调用string sql = "select * from xinwen where x_id=@Id";
            SqlParameter[] commandParameters = new SqlParameter[] 
            { 
                new SqlParameter("@Id",SqlDbType.Int), 
            };
            commandParameters[0].Value = Request.QueryString["x_id"];
            SqlDataReader mydr = SqlHelper.ExecuteReader(SqlHelper.cing, CommandType.Text, sql, commandParameters);
            if (mydr.Read())
            {
                TextBox1.Text = mydr["x_name"].ToString();
                TextBox2.Text = mydr["x_gjc"].ToString();
                TextBox3.Text = mydr["x_ly"].ToString();
                TextBox4.Text = mydr["x_time"].ToString();
                FCKeditor1.Value = mydr["x_nr"].ToString();
            }=================
问题是:这个代码运行正常的,现在要问的是,没看到colse();
即如果打开此链接数据库的话,如果不关闭的话,网站会慢死。
比如,类似这样才对啊!
 myCmd1.Connection.Open();
            SqlDataReader Dr1 = myCmd1.ExecuteReader();
            Dr1.Read();
            string Count = Dr1["iCount"].ToString();
            Dr1.Close();
            myCmd1.Connection.Close();

解决方案 »

  1.   

    没看到colse();
    ---------
    不好意思,这个地方写错了,应该是Close();
      

  2.   

    当某个XXXDataReader对象在生成时使用了CommandBehavior.CloseConnection,那数据库连接将在XXXDataReader对象关闭时自动关闭。 
      

  3.   

                catch
                {
                      throw;
                }
                finally
                {
                  conn.Close();
                }
    正常或者异常时都应该关闭连接资源。
      

  4.   

    finally
      {
      conn.Close();
      }
    到底要不要加这个了呢?
      

  5.   

    只要打开了 链接就要加上
    finally
      {
      conn.Close();
      }
    要不然每次调用的时候 都会打开链接, 而没有关闭
      

  6.   

                try
                {
                    using(SqlConnection conn = new SqlConnection(connectionString))
                    {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                    }
                }
                catch
                {            }
      

  7.   

    方法的内部不用关闭SqlDataReader。如果方法内需再次使用,需要先关闭。
    using(SqlConnection conn = new SqlConnection(connectionString))
     {
      SqlCommand cmd = new SqlCommand();
     PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
     SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
     cmd.Parameters.Clear();
    return rdr;
    }
      

  8.   


    string sql = "select * from xinwen where x_id=@Id";
                SqlParameter[] commandParameters = new SqlParameter[] 
                { 
                    new SqlParameter("@Id",SqlDbType.Int), 
                };
                commandParameters[0].Value = Request.QueryString["x_id"];
                using(SqlDataReader mydr = SqlHelper.ExecuteReader(SqlHelper.cing, CommandType.Text, sql, commandParameters))
                {
                    if (mydr.Read())
                    {
                        TextBox1.Text = mydr["x_name"].ToString();
                        TextBox2.Text = mydr["x_gjc"].ToString();
                        TextBox3.Text = mydr["x_ly"].ToString();
                        TextBox4.Text = mydr["x_time"].ToString();
                        FCKeditor1.Value = mydr["x_nr"].ToString();
                    }
                }
    在调用时用using,不用写finally,如2楼所说,阅读器关闭后数据库连接也会关闭。
      

  9.   

    ========================
    用了这个代码后,出错:
    异常详细信息: System.InvalidOperationException: 阅读器关闭时尝试调用 Read 无效。
      

  10.   

    datareader只要有打开数据库的地方必须关闭,否则占用服务器资源导到处网站访问故障
      

  11.   

     SqlParameter[] commandParameters = new SqlParameter[] 
                { 
                    new SqlParameter("@Id",SqlDbType.Int), 
                };
     这里不报错?
    SqlParameter[] commandParameters =
                { 
                    new SqlParameter("@Id",SqlDbType.Int)
                };
      

  12.   

    你那个如果要加 
    try
    {}
    cath
    {}
    finally
      {
      conn.Close();
      }
    查询的时候 就不要这个finally
      {
      conn.Close();
      }
    你在sqldatareader读取完成数据后
    reader.close();
    数据库连接就自动关闭了
    前提是
    cmd.ExecuteReader(CommandBehavior.CloseConnection);
    CommandBehavior.CloseConnection必须有
      

  13.   

    ASP.net技术群招募中 本群只招收 执着技术的开发者84506002
      

  14.   

    支持这种写法,我一直也这么用,让SqlConnection 出了using自动释放,很方便~~~~~
      

  15.   

    csdn无能人咯``````
         这么简单的问题,回答了大把,还没得出结论。public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
            {
                SqlCommand cmd = new SqlCommand();
                SqlConnection conn = new SqlConnection(connectionString);
                try
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch
                {
                    conn.Close();
                    throw;
                }
            }
    请问,你这个,如果出错有,还有返回值不