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;
            }
        }

 

转载于:https://www.cnblogs.com/zblc2016/p/5870925.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值