/// <summary> 
        /// ExecuteReader()方法——返回多行多列 
        /// </summary> 
        /// <param name="sql"></param> 
        /// <param name="parameters"></param> 
        /// <returns></returns> 
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters) 
        { 
           //定义连接变量conn 
            SqlConnection conn = new SqlConnection(connString); 
            //定义操作变量cmd 
            using (SqlCommand cmd = new SqlCommand(sql, conn)) 
            { 
                conn.Open(); 
                if (parameters != null) 
                { 
                    cmd.Parameters.AddRange(parameters ); 
                } 
                try 
                { 
                    //定义一个dr去接收cmd.ExecuteReader()方法返回的数据 
                    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                    return dr; 
                } 
                catch (Exception ex) 
                { 
                    conn.Close(); 
                    throw ex; 
                } 
            } 
        } 
 
第一个问题:SqlConnection conn = new SqlConnection(connString)为什么不写在using中? 
第二个问题:SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)括号内的参数是什么意思?; 
第三个问题:既CommandBehavior.CloseConnection,既然在这里已经可以让conn可以随着dr的关闭而关闭了,那为什么在catch块中还要再关闭一次conn???? 
 
 |