实体层在三层架构中的地位:sql
1.实体对象其实是对应着数据库里的每张表的,咱们把表里的字段封装在1个实体对象里 当你想用哪一个字段 你就就经过该实体对象的get() set() 把那个字段提取出来 这比你临时建立1个变量要灵活的多 并且便于程序的维护和扩展.在实际的3层结构开发中,专门有个实体层,他的做用就是便于层和层之间的数据传递 ;数据库
2.实体体现了面向对象程序开发的思想,把大量的数据进行封装 而后传递.固然 若是只是1,2个参数,那么传递实体或者传递变量均可以 。c#
好比你想查询某个学号的学生信息,那么你彻底就能够以ID为参数传下去 就不必把他再封装到实体对象里;数组
值与引用的区别:架构
将一个变量做为参数进行传递,本质是传栈空间的存储内容;框架
if (reader.Read()){ per = new MODEL.Person(); ** // 若是有数据,就建立对象,一行数据就对应着 一个实体类对象 }//读取一行记录,从第一行开始,if()的做用是最多一行数据 函数
return comm.ExecuteReader(CommandBehavior.CloseConnection);//中的CommandBehavior.CloseConnection 能够用做关闭通道的用途;spa
从数据库表中读取的数据到c#里面都会被作一层封装:1.若是是具体的值,就封装为object, 若是是null值就被封装为DBNull,这种类型的值不方便用户后期操做,因此咱们须要将这些类型的值转换为面向对象的数据---实体类对象,同时要明确,一行数据就对应着一个实体类对象,对象里面,包含了,name,cid....这些列内容,再将取出来的数据,object转换成值类型;对象
例:ci
per.name=reader["name"].tostring();
params 构造函数声明数组 而不知道数组长度 用的
在方法声明中的 params 关键字以后不容许任何其余参数,而且在方法声明中只容许一个 params 关键字。
params是指可变参数,它会根据调用方法的实参值生成一具对应长度的数组,如:没有传递实参值,那么就至关于SqlParameter[] p=new SqlParameter[0];若是传递了参数,那么就至关于SqlParameter[] p=new SqlParameter[]{p,p2,p3,p4};强调:params只能修饰数组
通常是存在于方法声明当中
例如: public static void UseParams(params int[] list){}
public static void UseParams2(params object[] list) {}
public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] ps){}
注意:
cmd.Parameters的Add方法是增长一个参数,增长多个参数的的时候使用一个foreach循环而已
cmd.Parameters的AddRange方法是增长一个参数的数组
配置文件的应用:
引用中选择框架,找到System.Configuration这个选项,选择引用;
在须要调用链接字符串的类中加入:readonly static string constr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
最中要的是在UI层的配置文件App.config中添加下面的代码:
<connectionStrings>
<add name="constr" connectionString="Data Source=.;Initial Catalog=ItcastSIM;Integrated Security=True"/>
</connectionStrings>
当须要修改数据库时候,使用配置文件能够避免致使程序出错,若须要修改数据库,则直接将配置文件找到打开后修改即可;
sqlHelp类的出现,是为了将重复的代码,封装成一个类对象,而后须要的时候就直接调用到该类中的方法,例如sqlDataReader reader=sqlHelp.ExecuteReader(comm,p,p2);