首页 > 代码库 > ADO.NET(查询、属性扩展)

ADO.NET(查询、属性扩展)

一、ADO.NET 融合面向对象的查询语句

1.只查询一条数据

//数据访问中的select方法public stu select(string xuehao)      {          stu s = null;          cmd.CommandText = "select *from stu where xuehao=@a";          cmd.Parameters.Clear();          cmd.Parameters.Add("@a", xuehao);          conn.Open();          SqlDataReader dr = cmd.ExecuteReader();          if(dr.HasRows)          {              dr.Read();              s = new stu();              s.Xuehao=dr["xuehao"].ToString();              s.Name=dr["name"].ToString();              s.Banji = dr["banji"].ToString();              s.Sex = Convert.ToBoolean(dr["sex"]);              s.Bir = Convert.ToDateTime(dr["bir"]);          }          conn.Close();          return s;      }C#代码:Console.Write("请输入要查询的学号:");           string ss=  Console.ReadLine();            Console.WriteLine("学号" + "\t" + "姓名" + "\t" + "性别" + "\t" + "班级" + "\t" + "生日");            stu a = sdata.select(ss);            if(a!=null)            {                Console.WriteLine(a.Xuehao+"\t"+a.Name+"\t"+((a.Sex)?1:0)+"\t"+a.Banji+"\t"+a.Bir.ToString("yyyy-MM-dd"));            }

2.查询所有语句

 数据访问中的代码:public List<stu> Select()      { //泛型集合,放置所有stu数据对象          List<stu> list = new List<stu>();          cmd.CommandText = "select *from stu";//查询语句          conn.Open();//打开数据库          SqlDataReader dr = cmd.ExecuteReader();//调用此方法用来查询           if(dr.HasRows)//如果数据表中有数据          {              while(dr.Read())//循环读取全部数据              {//每读取一行数据,就制作一个stus对象                 stu s = new stu();                  s.Xuehao = dr["xuehao"].ToString();                  s.Name = dr["name"].ToString();                  s.Banji = dr["banji"].ToString();                  s.Sex = Convert.ToBoolean(dr["sex"]);                  s.Bir = Convert.ToDateTime(dr["bir"]);//注意,在循环中,将制作好的每一个对象,都放到集合中去                  list.Add(s);              }          }          conn.Close();//关闭数据库          return list;      }C#代码部分:List<stu> ulist = new studata().Select();             if(ulist.Count>0)            {                foreach(stu s in ulist)//遍历                {                    Console.WriteLine(s.Xuehao + "\t" + s.Name + "\t" + ((s.Sex) ? 1 : 0) + "\t" + s.Banji + "\t" +s.Bir.ToString("yyyy-MM-dd"));                }            }            Console.ReadLine();

 二、小知识

1、程序的运行顺序和机制
卡断点
可以很好的处理程序中未知的BUG
并且可以很准确的找到BUG的位置

2、函数的抽象性
函数功能写的越少,那么这个函数能被应用的地方就越多

三、属性扩展**

处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释)

如:将性别返回的值true或false改为男或女

1.直接在实体类(如stu)中_sex私有变量再新建一个成员变量:

public string sexstr{get{return (_sex?"":"")}}

2、

将Console.WriteLine(s.Xuehao + "\t" + s.Name + "\t" + ((s.Sex) ? 1 : 0) + "\t" + s.Banji + "\t" +s.Bir.ToString("yyyy-MM-dd"));中的
((s.Sex) ? 1 : 0) 改为s.sexstr.
将表中的Users民族列显示的是民族代号处理成Nation表中的民族名称
  需要在Users类里面扩展一个显示Nation名称的属性

Nation表在C#新建Nation实体类和Nationdata数据访问类
Nationdata类新建一个查询方法:
 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;        }

再在Users内_Nation新建一个成员变量

 public string NationName//扩展的名族名称属性        {            get            {                NationData Ndata = new NationData();                string end = Ndata.Select(_Nation);                return end;            }        }

 

ADO.NET(查询、属性扩展)