Connection对象打开了一定要调用Close()方法关闭吗?
- C# code
/**********************************数据库操作类***************************************/ #region 获取学生名单 /// <summary> /// 取得学生名单 /// </summary> public SqlDataReader GetStudentList() { SqlConnection conn = new SqlConnection(connStr); try { conn.Open(); StringBuilder sb = new StringBuilder(); sb.AppendLine("select"); sb.AppendLine(" [StudentNo],"); sb.AppendLine("[StudentName] "); sb.AppendLine("from "); sb.AppendLine("[Student]"); SqlCommand comm = new SqlCommand(sb.ToString(), conn); return comm.ExecuteReader(); } catch (Exception) { Console.WriteLine("数据库操作失败!"); return null; } }/***************************************学员管理类*************************************/ /// <summary> /// 查看学生名单 /// </summary> public void ShowRosterList() { SqlDataReader reader = dbOperate.GetStudentList(); if (reader == null) { Console.WriteLine("出现异常!"); return; } Console.WriteLine("-------------------------------"); Console.WriteLine("学号\t姓名"); Console.WriteLine("-------------------------------"); StringBuilder sb = new StringBuilder(); //循环读取DataReader while (reader.Read()) { sb.AppendFormat("{0}\t{1}",reader["StudentNo"],reader["StudentName"]); Console.WriteLine(sb); sb.Length = 0; } Console.WriteLine("--------------------------------"); //关闭DataReader reader.Close(); }
如果在catch块后面加一个finally块用来调用Close()方法关闭数据库连接,那以就reader.Read()就读取不到结果了。
刚学,感觉好思维好混乱
[解决办法]
catch说明出错了,你可以关闭数据库,但其实你更应该使用事务,catch中回滚事务
[解决办法]
不一定,如果程序需要长时间运行并且经常有读取写入操作,定义一个公共变量的connection,不用每次都去关闭打开,这样会浪费资源,在程序结束后再关闭就可以。如果只是在需要的时候偶尔调用一次,那就最好关闭。
[解决办法]
未关闭的连接达到连接池的限制时,就会报错了,还是不要这么逆天的玩儿好
[解决办法]
加上cmd.ExecuteReader(CommandBehavior.CloseConnection);
当你关闭SqlDataReader时自动关闭数据库连接,如果返回SqlDataReader就不要关闭数据库,但是要记得及时关闭SqlDataReader
[解决办法]
- C# code
SqlConnection conn = new SqlConnection(connStr); try { conn.Open(); ... return comm.ExecuteReader(); } catch (Exception) { Console.WriteLine("数据库操作失败!"); return null; } finally { comm.Close(); } }
[解决办法]
一般来说 用完之后就关闭,下次再用又再打开.除非你的软件只有一个人在用,就可以不关闭了,
你可以看一下 微软的数据helper 类 使用using(){} 保证每次用完关闭的
[解决办法]
- C# code
using(SqlConnection conn = new SqlConnection(connStr)){ //处理逻辑 //推荐使用using}
------解决方案--------------------
视情况而定,如果需要的话,可以定义一个公共变量,等不用了再关,如果不是的话,还是尽量关闭。