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