一、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("学号" + " " + "姓名" + " " + "性别" + " " + "班级" + " " + "生日"); stu a = sdata.select(ss); if(a!=null) { Console.WriteLine(a.Xuehao+" "+a.Name+" "+((a.Sex)?1:0)+" "+a.Banji+" "+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 + " " + s.Name + " " + ((s.Sex) ? 1 : 0) + " " + s.Banji + " " +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 + " " + s.Name + " " + ((s.Sex) ? 1 : 0) + " " + s.Banji + " " +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; } }