• 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("学号" + "	" + "姓名" + "	" + "性别" + "	" + "班级" + "	" + "生日");
                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;
                }
            }
  • 相关阅读:
    bash :startx command not found
    RHSA-2019:1880-低危: curl 安全和BUG修复更新 及 RHSA-2019:1884-中危: libssh2
    CentOS8 安装后 无法切换中文输入法
    【centOS7】centOS7上普通用户切换root用户,相互切换
    centos8安装图解(超详细教程)
    电导率与土壤盐浓度间的计算公式
    Tlink物联网平台使用(三)
    Wireshark查看https的通讯
    docker中建立私有git服务器[gitlab]
    【转】程序员的生产力始于需求而非工具
  • 原文地址:https://www.cnblogs.com/zblc2016/p/5870925.html
Copyright © 2020-2023  润新知