获取一个SqlDataReader对象怎么利用using try/finally实现资源的释放啊?
下面的这样写是不是只能起到一个关闭连接的作用,达不到彻底释放资源的效果啊 
 SqlConnection sqlConn = null;
            SqlCommand sqlComm = null;
            SqlDataReader sqlDR = null;
                sqlConn = new SqlConnection(_sqlConnectionString);
                sqlComm = new SqlCommand(storedProcedureName, sqlConn);
                sqlComm.CommandType = CommandType.StoredProcedure;
                sqlConn.Open();
                sqlDR = sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
            return sqlDR;

解决方案 »

  1.   

    到返回SqlDataReader 这一步 还没有到释放资源的地步,包括连接也不能关闭。否则,就没有数据可读了。
      

  2.   

    Reader对象,只要调用SqlDataReader.Close就可以关闭了,如果你不需要在一个connection打开多个reader,则不需要close,只要关闭connection,reader会同时被关闭,因为一个connection只有一个reader,如果要using,那么对connection using就可以,
      

  3.   

            用SqlDataReader也是为了取数据,一般我们用DataTable 把数据存起来就好了
             /// <summary>
            /// 取得返回的数据
            /// </summary>
            /// <returns></returns>
            public DataTable GetResult()
            {
                DataTable dtResult = new DataTable();
                using (SqlConnection sqlConn = new SqlConnection(_sqlConnectionString))
                {
                    sqlConn.Open();
                    using (SqlCommand sqlComm = new SqlCommand(storedProcedureName, sqlConn))
                    {
                        sqlComm.CommandType = CommandType.StoredProcedure;
                        using (SqlDataReader sdr = sqlComm.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                           if(null!=sdr&&sdr.HasRows&&sdr.Read())
                            dtResult.Load(sdr);
                        }
                    }
                }
                return dtResult;
            }
      

  4.   

    你不应该return一个reader,而应该把connection.Open和Reader以及读取数据的全部过程都放在一起,如果你非要这么做,应该把connection和reader一起返回,在外边close这两个对象,不过如果发生异常就不会释放正确,
      

  5.   


            /// <summary>
            /// 取得返回的数据
            /// </summary>
            /// <returns></returns>
            public DataTable GetResult()
            {
                DataTable dtResult = new DataTable();
                using (SqlConnection sqlConn = new SqlConnection(_sqlConnectionString))
                {
                    sqlConn.Open();
                    using (SqlCommand sqlComm = new SqlCommand(storedProcedureName, sqlConn))
                    {
                        sqlComm.CommandType = CommandType.StoredProcedure;
                        using (SqlDataReader sdr = sqlComm.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            if(null!=sdr&&sdr.HasRows&&sdr.Read())
                            dtResult.Load(sdr);
                        }
                    }
                }
                return dtResult;
            }
      

  6.   

    获取DataTable是可以啊,我尝试下吧