日期:2014-05-17  浏览次数:20431 次

这里的SqlDataReader 要不要显式关闭?

//下面是我简化后的一个类,代码如下:
//想问的是,本类实例调用后,也就是 using 大括号中 return 退出后,SqlConnection 肯定是自动关闭了,SqlDataReader 要不要显式关闭?


    /// <summary>
    /// 对用户表 W_USER 的一些操作
    /// </summary>
    public class W_User
    {
        public W_User()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        public int selectNamePwd(string _name)
        {
            W_Conn c = new W_Conn();//连接方法另处已定义。
            SqlConnection con = c.GetCon();
            using (con)
            {
                SqlCommand cmd = new SqlCommand("pro_select_USER_Name", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@admin_name", SqlDbType.VarChar, 20).Value = _name;
                con.Open();
                SqlDataReader myDr = cmd.ExecuteReader();
                if (myDr.Read())  return Convert.ToInt32(myDr["User_ID_INT"]);
                else return 0;
            }
        }
    }


------解决方案--------------------
你这样写的话就不要关闭了,如果是对象封装就要要关闭
------解决方案--------------------
关闭了你返回个屁啊
吧Reader 也写在using里面
------解决方案--------------------
引用:
如上面回复内容://到这里,SqlDataReader 有没有被自动关闭?

没有
------解决方案--------------------
加个临时变量,后再关闭也不迟呀,再说了,你不加变变编译后,编译器也会加你加个临时变量
 
using(SqlDataReader myDr = cmd.ExecuteReader())
{
  if (myDr.Read())