一、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)?:)+"\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>)
{
foreach(stu s in ulist)//遍历
{
Console.WriteLine(s.Xuehao + "\t" + s.Name + "\t" + ((s.Sex) ? : ) + "\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(查询、属性扩展)的更多相关文章

  1. ADO.NET 【属性扩展】性别、年龄、编号

    1.性别属性扩展 private bool _Sex; //成员变量 public bool Sex // 属性 { get { return _Sex; } set { _Sex = value; ...

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

    今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...

  3. C#-WebForm-LinQ(一)-LinQ:语言集成查询(Language Integrated Query)-增删改查、属性扩展

    LinQ-语言集成查询(Language Integrated Query) 高集成化的数据库访问技术 LINQ 2 SQL 实际是将数据库的表映射成程序中的类 会把数据库的表名原封不动的变成类名 数 ...

  4. linq组合查询时属性扩展问题

    学习linq的过程中,做一个表格的条件查询并且分页显示.显示的出的数据需要经过属性拓展来实现将需要给用户看的值显示出来. 后台绑定数据时用的是上下文---- if(!ispostback){ usin ...

  5. ADO.Net属性扩展

    属性扩展 大体意思:有外键关系时将代号化信息处理成原始文字 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 using ...

  6. 使用ADO.NET查询和访问数据库

    使用ADO.NET查询和访问数据库步骤 使用ADO.NET查询和访问数据库 连接数据库操作: 1.       定义连接字符串: String connString = "Data Sour ...

  7. YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧

    实体类通常需要和数据库表进行了ORM映射,当你需要添加新的属性时,往往同时也需要在数据库中添加相应的字段并配置好映射关系,同时可能还需对数据访问组件进行重新编译和部署才能有效.而当你开始设计一个通用数 ...

  8. php查询文件扩展名

    //查询文件扩展名 function extension($str){ $str = implode("",explode("\\",$str)); $str ...

  9. grootJs属性扩展 groot.bindExtend

    index12.html <html><head> <title>grootJs属性扩展 groot.bindExtend</title> <sc ...

随机推荐

  1. mysql创建用户和创建数据库赋值用户操作权限

    mysql 进入mysqldb SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; ...

  2. UVALive4287 hdu2767 hdu3836 强连通

    题意:有多个命题,需要证明他们可以互相推出,现在已经有一些证明关系即 A 可以证明 B,问至少还需要多少证明关系. 首先,如果某几个命题证明关系可以成环,那么这些命题必然可以相互证明,只要沿着环的边走 ...

  3. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  4. 黑马程序员——JAVA基础之set集合

    ------- android培训.java培训.期待与您交流! ---------- Set:       元素是无序(存入和取出的顺序不一定一致),元素不可以重复.    Set接口中常用的类: ...

  5. android开源项目---tool篇

    本文转载于:http://blog.csdn.net/likebamboo/article/details/19080801 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库OR ...

  6. Linux磁盘空间被未知资源耗尽【转】

    Linux磁盘空间被未知资源耗尽 在linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间, ...

  7. python 字符串 大小写转换

    总结 capitalize() 首字母大写,其余全部小写 upper() 全转换成大写 lower() 全转换成小写 title() 标题首字大写,如"i love python" ...

  8. jQuery对下拉框Select操作总结

    jQuery对下拉框Select操作总结 转自网络,留做备用 jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change( ...

  9. JS 阻止浏览器默认行为和冒泡事件

    JS 冒泡事件   首先讲解一下js中preventDefault和stopPropagation两个方法的区别: preventDefault方法的起什么作用呢?我们知道比如<a href=& ...

  10. .net 添加Cookie的4种方法

    第一种添加Cookie方法 HttpCookie myCookie = new HttpCookie("userrole"); myCookie.Values["a&qu ...