读书人

Connection对象打开了一定要调用Close

发布时间: 2012-09-10 22:20:12 作者: rapoo

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}
------解决方案--------------------


视情况而定,如果需要的话,可以定义一个公共变量,等不用了再关,如果不是的话,还是尽量关闭。

读书人网 >C#

热点推荐