帮忙看看我的函数有没有合理关闭数据库连接
--------------------编程问答-------------------- 没有。。。
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()
finally
{
reader.Close();
cmd.Dispose();
myconn.Dispose();
myconn.Close();
}
{
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里的语句 所以是关闭数据库了 --------------------编程问答--------------------
我也这么认为 --------------------编程问答-------------------- dispose和close用哪个好,还是都要用? --------------------编程问答-------------------- MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
只要关闭reader 就可以自动关闭连接。 --------------------编程问答--------------------
一般来说都一样的,调用一个就可以了 --------------------编程问答-------------------- 一楼说的挺正确的。。。不防去试试看。。 --------------------编程问答-------------------- 推荐个好的学习网站
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#