没有
从里到外释放关闭finally
        {
            reader.Close();
            cmd.Dispose();
            myconn.Dispose();
            myconn.Close();
        }

解决方案 »

  1.   

    public static ArrayList getReferee1()
            {
                MySqlConnection myconn = new MySqlConnection(strcon);
                myconn.Open();
                MySqlCommand cmd = new MySqlCommand("select email from referee1", myconn);
                MySqlDataReader reader = cmd.ExecuteReader();
                ArrayList al = new ArrayList();
                try
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            al.Add(reader["email"].ToString());
                        }
                    }                return al;
                }
                catch (Exception)
                {
                    return null;
                }
                finally
                {
    // add 
    reader.Close();
                    myconn.Close();
                }
            }
      

  2.   

                myconn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();这两句也可能产生异常,所以最好把他们try进去,而且reader最后也要关闭
      

  3.   

    最后都会执行finally里的语句 所以是关闭数据库了
      

  4.   

    dispose和close用哪个好,还是都要用?
      

  5.   

    MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)只要关闭reader 就可以自动关闭连接。
      

  6.   

    推荐个好的学习网站
    http://www.it63.net
    一起去学习学习
      

  7.   

    推荐个好的学习网站
    http://www.it63.net一起去学习学习
      

  8.   


    我建议在创建对象时,用using(实例化对象){},他可以自动释放资源,不用手动关闭,能优化程序
    代码如下:
            public static ArrayList getReferee1()
            {
                MySqlConnection myconn = new MySqlConnection(strcon);
                myconn.Open();
                MySqlCommand cmd = new MySqlCommand("select email from referee1", myconn);
                MySqlDataReader reader = cmd.ExecuteReader();
                ArrayList al = new ArrayList();
                try
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            al.Add(reader["email"].ToString());
                        }
                    }
                    return al;
                }
                catch (Exception)
                {
                    return null;
                }
                finally
                {
                    myconn.Close();
                }
            }
    public static ArrayList getReferee1()
            {
                using(MySqlConnection myconn = new MySqlConnection(strcon))
                {
                       myconn.Open();
                       MySqlCommand cmd = new MySqlCommand("select email from referee1", myconn);
                       MySqlDataReader reader = cmd.ExecuteReader();
                      ArrayList al = new ArrayList();
                      try
                     {
                             if (reader.HasRows)
                              {
                                 while (reader.Read())
                                {
                                      al.Add(reader["email"].ToString());
                                }
                              }
                                   return al;
                    }
                   catch (Exception)
                  {
                    return null;
                  }
                  finally
                  {
                    myconn.Close();
                  }
              }
            }
      

  9.   

    finally
    {
        if(myconn != null)//请加这个判断
        {
            myconn.Close();
        }
    }