ADO.NET 数据访问类查询、属性扩展

  今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询。

  主程序代码:

List<Users> Ulist = new UsersData().Select();

                if (Ulist.Count > 0)//判断是否包含语句
                {
                    foreach (Users u1 in Ulist)//遍历
                    {
                        Console.WriteLine(u1.UserName + "  " + u1.PassWord + "  " + u1.NickName + "  " + u1.Sex + "  " + u1.Birthday + "  " + u1.Nation);
                    }

                }

  UsersData数据访问类中的代码:

     public List<Users> Select()
        {
            List<Users> list=new List<Users>();
            cmd.CommandText="select * from Users";

            conn.Open();
            SqlDataReader dr=cmd.ExecuteReader();
            if(dr.HasRows)//判断是否包含数据
            {
                while(dr.Read())
                {
                    Users u=new Users();
                    u.UserName=dr["UserName"].ToString();
                    u.PassWord=dr["PassWord"].ToString();
                    u.NickName=dr["NickName"].ToString();
                    u.Sex = Convert.ToBoolean(dr["Sex"]);
                    u.Birthday=Convert.ToDateTime(dr["Birthday"]);
                    u.Nation=dr["Nation"].ToString();

                    list.Add(u);
                }
            }
            conn.Close();

            return list;
        }

  之后,我学习了属性扩展的内容。

  属性扩展就是将程序中所显示的代码显示为普通用户也可以看懂的字符。这就需要我们在实体类中,给成员变量再添加一个新的属性,该属性只用写上读取,即get{},在主程序中调用这个属性,如:

    private DateTime _Birthday;
        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday
        {
            get { return _Birthday; }
            set { _Birthday = value; }
        }
        public string BirthdayStr
        {
            get { return _Birthday.ToString("yyyy年MM月dd日");}
        }

  若所要更改显示的内容在不同的表中,如:人员管理系统中民族代码改为民族名称(民族代码Nation在人员信息表Users中,而民族代码NationCode和民族名称NationName在民族信息表Nation中),则实体类Users中的代码为:

    private string _Nation;

        /// <summary>
        /// 民族
        /// </summary>
        public string Nation
        {
            get { return _Nation; }
            set { _Nation = value; }
        }
        public string NationName
        {
            get
            {
                NationData Ndata = new NationData();
                string end = Ndata.select(_Nation);
                return end;
            }
        }

  而数据访问类NationData中的代码为:

  public class NationData
    {
        SqlConnection conn = null;
        SqlCommand cmd = null;

        public NationData()
        {
            conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123;");
            cmd = conn.CreateCommand();
        }

        public string select(string code)
        {
            string end = "<无>";

            cmd.CommandText = "select * from Nation where NationCode=@a";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@a",code);

            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if(dr.HasRows)
            {
                dr.Read();
                end=dr["NationName"].ToString();
            }

            conn.Close();
            return end;
        }

    }

  今天,我还了解到了,通过卡断点,可以很好的处理程序中未知的BUG,并且可以很准确的找到BUG的位置。在写函数时,我们把每个函数的功能写的越少,越抽象,那么这个函数被应用的范围就会越广。

posted @ 2016-09-14 16:52  兔小灰385  阅读(158)  评论(0编辑  收藏  举报