帮忙看看我的函数有没有合理关闭数据库连接 没有从里到外释放关闭finally { reader.Close(); cmd.Dispose(); myconn.Dispose(); myconn.Close(); } 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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里的语句 所以是关闭数据库了 dispose和close用哪个好,还是都要用? MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)只要关闭reader 就可以自动关闭连接。 推荐个好的学习网站http://www.it63.net一起去学习学习 推荐个好的学习网站http://www.it63.net一起去学习学习 我建议在创建对象时,用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(); }} 有关DataTable的Select方法 关于VS调试的问题, 这个错误是什么导致的呢? C#应用程序,如何将一个sql数据库的内容导入另外一个sql数据库呢 新手DataGrid问题 有没有办法了解有那些程序的执行 各位大侠赐教! C#中用WMI如何获取硬盘序列号? 小妹求救:在C#里怎样将程序和MSDE一起打包呀?? 给学习C#的同志们送分,有兴趣的同志去看看《用C#创建Web应用程序》,我在文档中心发的帖子。 一个控件中的鼠标事件,如何计算定位一个右键菜单.需要哪些坐标?如何获得坐标? 无法显式调用运算符或访问器
{
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();
}
}
MySqlDataReader reader = cmd.ExecuteReader();这两句也可能产生异常,所以最好把他们try进去,而且reader最后也要关闭
http://www.it63.net
一起去学习学习
http://www.it63.net一起去学习学习
我建议在创建对象时,用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();
}
}
}
{
if(myconn != null)//请加这个判断
{
myconn.Close();
}
}