当前位置:编程学习 > C#/ASP.NET >>

帮忙看看我的函数有没有合理关闭数据库连接

        
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();
            }
        }
--------------------编程问答-------------------- 没有。。。
从里到外释放关闭

finally
        {
            reader.Close();
            cmd.Dispose();
            myconn.Dispose();
            myconn.Close();
        }
--------------------编程问答-------------------- 可以 --------------------编程问答-------------------- 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();
            }
        } --------------------编程问答-------------------- --------------------编程问答-------------------- 当然可以了,链接都断了。 --------------------编程问答--------------------             myconn.Open();
            MySqlDataReader reader = cmd.ExecuteReader();

这两句也可能产生异常,所以最好把他们try进去,而且reader最后也要关闭
--------------------编程问答-------------------- 最后都会执行finally里的语句 所以是关闭数据库了 --------------------编程问答--------------------
引用 6 楼 ICanUseThisID 的回复:
            myconn.Open(); 
            MySqlDataReader reader = cmd.ExecuteReader(); 

这两句也可能产生异常,所以最好把他们try进去,而且reader最后也要关闭 

我也这么认为 --------------------编程问答-------------------- dispose和close用哪个好,还是都要用? --------------------编程问答-------------------- MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

只要关闭reader 就可以自动关闭连接。 --------------------编程问答--------------------
引用 9 楼 bary 的回复:
dispose和close用哪个好,还是都要用?

一般来说都一样的,调用一个就可以了 --------------------编程问答-------------------- 一楼说的挺正确的。。。不防去试试看。。 --------------------编程问答-------------------- 推荐个好的学习网站
http://www.it63.net
一起去学习学习 --------------------编程问答-------------------- 推荐个好的学习网站
http://www.it63.net一起去学习学习 --------------------编程问答-------------------- reader没有关闭吧? --------------------编程问答--------------------
我建议在创建对象时,用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();
              }
          }
        }

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

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,