不知道什么问题有时候会出现,有时候不会出现。出现错误刷新一下页面就好了,但是给客户部能是大黄页啊。
人多访问的时候也会出现这样的错误!!困扰我很久了,  大家帮我看看 我的DBHelper有没有这样的问题 :  public class DBHelper
  {  //数据库连接属性
  private static SqlConnection connection;
  public static SqlConnection Connection
  {
  get
  {
  string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  if (connection == null)
  {
  connection = new SqlConnection(connectionString);
  connection.Open();
  }
  else if (connection.State == System.Data.ConnectionState.Closed)
  {
  connection.Open();
  }
  else if (connection.State == System.Data.ConnectionState.Broken)
  {
  connection.Close();
  connection.Open();
  }
  return connection;
  }
  }
  /// <summary>
  /// 关闭数据库连接
  /// </summary>
  public static void CloseConn()
  {
  SqlConnection conn = Connection;
  if (conn.State == System.Data.ConnectionState.Open)
  conn.Close();
  }  /// <summary>
  /// 执行无参SQL语句
  /// </summary>
  public static int ExecuteCommand(string safeSql)
  {
  SqlCommand cmd = new SqlCommand(safeSql, Connection);
  int result = cmd.ExecuteNonQuery();
  CloseConn();
  return result;
  }
  /// <summary>
  /// 执行带参SQL语句
  /// </summary>
  public static int ExecuteCommand(string sql, params SqlParameter[] values)
  {
  SqlCommand cmd = new SqlCommand(sql, Connection);
  cmd.Parameters.AddRange(values);
  int result = cmd.ExecuteNonQuery();
  CloseConn();
  return result;
  }
  /// <summary>
  /// 执行无参SQL语句,并返回执行记录数
  /// </summary>
  public static int GetScalar(string safeSql)
  {
  SqlCommand cmd = new SqlCommand(safeSql, Connection);
  int result = Convert.ToInt32(cmd.ExecuteScalar());
  CloseConn();
  return result;
  }
  /// <summary>
  /// 执行有参SQL语句,并返回执行记录数
  /// </summary>
  public static int GetScalar(string sql, params SqlParameter[] values)
  {
  SqlCommand cmd = new SqlCommand(sql, Connection);
  cmd.Parameters.AddRange(values);
  int result = Convert.ToInt32(cmd.ExecuteScalar());
  CloseConn();
  return result;
  }
  /// <summary>
  /// 执行无参SQL语句,并返回SqlDataReader
  /// </summary>
  public static SqlDataReader GetReader(string safeSql)
  {
  SqlCommand cmd = new SqlCommand(safeSql, Connection);
  SqlDataReader reader = cmd.ExecuteReader();
  return reader;
  }
  /// <summary>
  /// 执行有参SQL语句,并返回SqlDataReader
  /// </summary>
  public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
  {
  SqlCommand cmd = new SqlCommand(sql, Connection);
  cmd.Parameters.AddRange(values);
  SqlDataReader reader = cmd.ExecuteReader();
  return reader;
  }  /// <summary>
  /// 查询DataTable
  /// </summary>
  /// <param name="SqlStr"></param>
  /// <returns></returns>
  public static DataTable GetTable(string SqlStr)
  {
  SqlDataAdapter dap = new SqlDataAdapter(SqlStr, Connection);
  DataSet ds = new DataSet();
  dap.Fill(ds);
  CloseConn();
  return ds.Tables[0];  }
  /// <summary>
  /// 增删改
  /// </summary>
  /// <param name="SqlStr"></param>
  /// <returns></returns>
  public static bool Execute(string SqlStr)
  {
  SqlCommand cmd = new SqlCommand(SqlStr, Connection);
  int result = cmd.ExecuteNonQuery();
  CloseConn();
  return result > 0;
  }
  }
/////////////////////////调用DBHelper//////////////////////////////////////////
/////////////////////////调用DBHelper///////////////////////////////////////////  public IList<Sfwzxx> Select()
  {
  SqlDataReader dr = DBHelper.GetReader("select * from sfwzxx ");
  IList<Sfwzxx> list = new List<Sfwzxx>();
  while (dr.Read())
  {
  Sfwzxx sfwzxx = new Sfwzxx();
sfwzxx.Bh=((dr["Bh"])==DBNull.Value)?sfwzxx.Bh:Convert.ToInt32(dr["Bh"]);
sfwzxx.Fwqmc=dr["Fwqmc"].ToString();
  list.Add(sfwzxx);
  }
  dr.Close();
  DBHelper.CloseConn();
  return list;
  }

解决方案 »

  1.   

    返回值不要用SqlDataReader ,他不关闭链接,可以用DataSet
      

  2.   

    SqlDataReader reader = cmd.ExecuteReader();
    生成datareader对象的语句这么写        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);而且千万记住,在使用完后一定要把这个datareader对象Close().
      

  3.   

    CommandBehavior.CloseConnection
    起什么作用 ,问一下关闭datareader有关系么
      

  4.   


    CommandBehavior.CloseConnection
    起什么作用 ,问一下关闭datareader有关系么
      

  5.   

    数据库操作及时关闭using(sqlconnection
    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    数据库操作类问题
      

  6.   

    这位老师我问一下:有了上面的这句话 我是不是 不用关datareader和Connection了。