回顾知识点:
1.三层结构访问层的功能: 直接和数据库进行数据交互,包括增删改查的基本操作。
2.三层结构各层的依赖关系:
表示层依赖于业务逻辑层(BLL),业务逻辑层(BLL)依赖于数据访问层(DAL)。并且这三个层都依赖于数据模型层(Model)。
实体层充当的是一个数据载体,把数据封装成对象,由对象从访问层传递给业务逻辑层,再从业务层传给表示层。
业务逻辑层的作用是做业务处理。关于项目的特殊业务,可以放到业务逻辑层进行处理。将原始数据封装成业务对象。
访问层一般不作过多的业务处理,只负责对数据库的维护,进行增删改查的操作。
3.ADO.NET可以调用带参的SQL命令
4.DataSet,DataTable,DataView三者之间的关系:
DataSet中存在Tables集合,Tables集合中装的就是DataTable对象,DataView是数据视图,直接隶属于表,DataTable能够产生视图。
视图是针对于“列”来说的。可以从表中挑选出几列,组成一个视图。也可以由多张表,挑选出几个列组成视图。
他们三者的关系类似于:数据库,数据表,数据视图
DataSet在三层结构中的作用:
DataSet(数据集),它是数据在内存当中的一种存储形式。把数据库中的数据拿出来,先存到内存中,把二维表的形式拿过来,并且保持原有数据表的格式,需要一个“容器”,这种容器就是DataSet。DataSet还可以表现出数据之间的关系。
DataSet与实体都能完成相同的功能:
1.都充当数据的载体 2.能够做映射
载体-----容器:
把数据库中的数据拿过来,放入内存中,内存中的载体就是DataSet或实体。
映射关系:
实体的映射:是靠实体对象进行映射。根据数据表,构建相应的实体类。在实体类中的属性创建,依据是表中的字段。把数据库中的每一条记录,转化成为每一个实体对象。
DataSet的映射:以表的形式去映射。跟实体以记录的形式映射不同。通过将数据库中的表直接映射为DataTable,再将这个DataTable添加到DataSet中,最后把这个DataSet拿到应用程序中去用。
区别:
实体完全是面向对象。把每条记录看成是一个对象。
DataSet是将原数据库中的二维表拿过来,表现到界面上。完全是一种二维形式的,没有对象的概念。
自定义DataSet:
DataSet----DataTable----DataColumn-----DataRow
DataSet可以充当DataGridView的一种数据源。
创建DataSet的两种方法:
1.SqlDataAdapter.Fill(dataSet,表名)
通过Fill()方法,将二维表填充到DataSet中
适配器模式(23种设计模式中的一种)
2.自定义DataSet
配置文件:
数据库连接字符串写在配置文件中,可以便于修改。通过以记事本的形式打开配置文件后,可以直接修改配置文件,因为配置文件是文本形式的,所以不必将程序重新编译。
要将配置文件写在主程序(由Main方法的层)当中。
connectionString="server.;database=MySchool;uid=sa;pwd=accp"/>
ConfigurationManager.ConnectionString["conStr"].ToString();
为ComboBox指定数据源需要指定数据/显示字段(DisplayMember)和值字段(ValueMember)。
值字段是指有一个编号。值一般是看不见的。相当于主键。
自定义DataSet:
DataSet dataSet = new DataSet();
DataTable dtClass = new DataTable("Class");
DataColumn dcClassName = new
DataColumn("className",typeof(string));
DataColumn dcGradeId = new
DataColumn("gradeId",typeof(int));
dtClass.Columns.Add(dcClassName);
dtClass.Columns.Add(dcGradeId);
DataRow drClass = dtClass.NewRow();
drClass["className"] = this.txtClassName.Text;
drClass["gradeId"] =
objGrade.GetGradeIdByGradeName(this.cboGrade.Text);
dtClass.Rows.Add(drClass);
dataSet.Tables.Add(dtClass);
DataView为不同的用户展示不同的数据
DataSet的作用:
数据查询,多张表联合查询时,从若干张不同的表中,抽取出若干列,装在一起,无法定义出一个实体,并且没有必要专门针对这次查询,定义出一个实体,实体类在查询某一张表所有数据时,非常好使,也很好分析,因为它是面向对象的。但是在刚才那种情况下,应该使用DataSet,因为DataSet是一种自定义的二维表,将从不同的表中查询出的列数据,封装到DataSet中,与数据绑定控件结合很好。因为数据绑定控件可以接收实现了IList接口的集合,也可以接收DataTable,dgvTeacher.DataSource
= dataSet.Tables["TeacherTable"];
业务:
有在业务逻辑层做的,也有在存储过程中做的。
如果将业务写在存储过程中,会大量返回DataSet。
comm.CommandType = CommandType.TableDirect;
执行一张表,把表名当成是Command命令的执行。
默认是执行普通文本:CommandType.Text
若执行存储过程,那么是:CommandType.StoredProcedure