C#三十六 三层架构的实现(下)

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
数据可视化DataV,5个大屏 1个月
简介: C#三十六 三层架构的实现(下)

2.3    如何创建DataSet


DataSet的构建有两种方法。


(1)通过DataAdapter(数据适配器)的Fill方法将数据直接填充到DataSet中。


(2)通过手动编码自定义DataTable(数据表)、DataColumn(数据列)、DataRow(数据行),然后将数据表添加到DataSet中。


首先,我们对DataSet做一个回顾,一个DataSet是由多个DataTable组成,而一个DataTable又是由多个DataColumn和多个DataRow组成。


接下来,我们来分别对DataTable、DataColumn、DataRow进行深入讨论。


1.   DataTable


DataTable是内存中的一个关系数据表,可以独立创建使用,也可以作为DataSet的一个成员使用。如何将DataTable作为DataSet的一个成员使用呢?首先,我们需要创建一个DataTable对象,其次通过使用Add方法将其添加到DataSet对象的Tables集合中,如下所示:


DataSet dsClass=newDataSet();
DataTable dtClass=newDataTable("Class");
dsClass.Tables.Add(dtClass);


如果我们没有指定DataTable名称时把DataTable添加到DataSet中,该表会得到一个从“0”开始递增的默认表名(例:Table0、Table1、Table2).


2.   DataColumn


DataColumn是创建DataTable的基础,我们通过向DataTable中添加一个或多个DataColumn对象来定义DataTable的结构。DataColumn有一些常用属性用于对输入数据的限制,例如:数据类型、数据长度、默认值等,见下表:

属  性

说   明

AllowDBNull

是否允许空值

ColumnName

DataColumn的名称

DataType

存储的数据类型

MaxLength

获取或设置文本列的最大长度

DefaultValue

默认值

Table

所属的DataTable的名称

Unique

DataColumn的值是否唯一


定义DataColumn有两种方法,分别为示例一、示例二:


示例一:


DataColumnclassName=new DataColumn();
className.ColumnName= "ClassName";
className.DataType=System.Type.GetType("System.String");
className.MaxLength=50;

示例二:


DataColumn className=newDataColumn("ClassName",typeof(string));
className.MaxLength=50;


3.   DataRow


DataRow表示DataTable中包含的实际数据,我们可以通过DataRow将数据添加到用DataColumn定义好的DataTable中,如示例三所示:


DataColumn className=newDataColumn("ClassName",typeof(string));
className.MaxLength=50;
//创建一个新的数据行
DataRowdrClass=dtClass.NewRow();
drClass["className"]=this.txtClassName.Text.Trim();

2.4    如何自定义DataSet


自定义DataSet主要步骤如下:


①、         创建DataSet对象。


②、         创建DataTable对象。


③、         创建DataColumn对象构建表结构。


④、         将创建好的表结构添加到表中。


⑤、         创建DataRow对象新增数据。


⑥、         将数据插入到表中。


⑦、         将表添加到DataSet中。


示例如下:

DataSet dsClass=newDataSet();
//创建班级表
DataTable dtClass=newDataTable("Class");
//创建年级ID列
DataColumndcClassName=new DataColumn("ClassName",typeof(string));
className.MaxLength=50;
//创建年级ID列
DataColumndcGradeId=new DataColumn("GradeId",typeof(int));
//将定义好列添加到班级表中
dtClass.Columns.Add(dcClassName);
dtClass.Columns.Add(dcGradeID);
//创建一个新的数据行
DataRowdrClass=dtClass.NewRow();
drClass["className"]=this.txtClassName.Text.Trim();
drClass["gradeID"]=objGrade.GetGradeIDByGradeName(this.cboGrade.Text.Trim());
//将新的数据行插入到班级表中
dtClass.Rows.Add(drClass);
//将班级表添加到DataSet中
dsClass.Tables.Add(dtClass);

如上所述,我们学习了如何构建DataSet以及如何将数据填充到DataSet中。


2.5    如何获取DataSet中的数据


从DataSet中获取数据有两种方式:


(1)通过指定DataSet中的具体DataTable的某行某列来获取数据。


步骤如下:


①、         通过表名,从DataSet中获取指定的DataTable。


②、         通过索引,从DataTable中获取指定的DataRow。


③、         通过列名,从DataRow中获取指定列的数据。


以获取班级信息为例:


示例如下:


//得到班级名称
dsClass.Tables["Class"].Rows[0][ "ClassName"];
//得到年级ID
dsClass.Tables["Class"].Rows[0][ "GradeID"];

(2)将DataSet的数据直接绑定到数据控件上。


2.6          实现数据访问层


 在第一章的项目基础上,实现对业务逻辑层的完善与修改。

#region Public Methods
///<summary>
///获取所有学员信息
///</summary>
///<returns>所有学员信息数据集</returns>
public DataSet GetAllStudents()
{
    DataSet ds=new DataSet();
    SqlConnection conn=new SqlConnection(connstring);
    SqlDataAdapter objAdapter=new SqlDataAdapter("usp_SelStudentInfo",conn);
//usp_SelStudentInfo 为查找学生存储过程信息
           objAdapter.SelectCommand.CommandType=CommandType.StoredProcedure;
objAdapter.Fill(ds,"stuTable");
conn.Close();
conn.Dispose();
return ds;
}
#endregion
//根据年级编号获得班级信息,参考代码如下:
public DataSetGetClassByGradeID(int gradeID)
{
   DataSet ds = new DataSet();
   SqlConnection conn = new SqlConnection(connString);
   SqlDataAdapter objAdapter = newSqlDataAdapter(   "usp_SelectClassesByGradeID",conn);
   objAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
  objAdapter.SelectCommand.Parameters.Add("@GradeID",   SqlDbType.Int).Value = gradeID;
   objAdapter.Fill(ds, "classTable");
   conn.Close();
   conn.Dispose();
   return ds;
 }
/// 根据性别筛选学员信息,并按姓名排序
public DataViewGetStudentBySex(string sex)
   {     //实例化DataView对象
           DataView dvStudent = new DataView();
          //获取从数据层返回的学生信息表
           dvStudent.Table =   studentController.SelectAllStudent().Tables["studentTable"];
          //根据条件过滤信息
           if (sex.Trim() == "男")
                dvStudent.RowFilter ="Sex='男'";
           if (sex.Trim() == "女")
                 dvStudent.RowFilter ="Sex='女'";
          //按学生姓名降序排序
          dvStudent.Sort = “StudentName DESC”;
         //返回过滤后的数据视图
          return dvStudent;
   }


//其他代码见上课案例.



在用三层架构开发应用程序时,首先根据需求编辑界面数据展示方式,然后按底层到顶层的顺序实现数据访问层、业务逻辑层、表示层。


   在实现数据访问层时,为了使我们开发的应用程序易于维护,我们常把不同表的数据访问代码封装在不同的类里,一般情况下一个类对应一张表。




小结



n       用Ado.Net实现三层结构应用程序时,DataSet的主要作用是三层之间数据传递的载体。


n       用Ado.Net实现三层结构应用系统时,数据访问层主要使用的类有:


ü       SqlConnection类,实现数据库连接。


ü       SqlCommand类,执行Sql命令。


ü       SqlDataReader类,读取数据。


ü       SqlDataAdapter类,执行Sql命令,返回DataSet。


ü       DataSet类,封装用户请求数据。


n           用Ado.Net执行带参数的Sql命令时,需要使用参数化类Parameters的Add方法为Sql命令添加参数,包括参数名称、参数类型。结合Ado.Net章节来重新使用参数化对象对数据访问层、业务逻辑层进行重新代码架构。


n           业务逻辑层实现数据传递、处理时,首先引用数据访问层,其次实例化数据访问对象,最后调用数据访问层功能,并实现数据处理。


作业:


完善第一章自己已经架构好的MIS系统,丰富完善数据访问层、业务逻辑层和表示层,要求:


1.   利用本章讲解的DataSet进行数据传递;


使用存储过程来操作数据。


相关实践学习
Github实时数据分析与可视化
基于Github Archive公开数据集,将项目、行为等20+种事件类型数据实时采集至Hologres进行分析,并搭建可视化大屏。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
12月前
|
C# 数据库 程序员
C#三十六 三层架构的实现(上)
C#三十六 三层架构的实现
52 0
|
12月前
|
SQL 分布式计算 数据库
C#三十五 三层架构企业应用
C#三十五 三层架构企业应用
57 0
|
5月前
|
开发框架 前端开发 NoSQL
【C#】医学实验室云LIS检验信息系统源码 采用B/S架构
【C#】医学实验室云LIS检验信息系统源码 采用B/S架构
116 1
|
5月前
|
C#
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
78 0
|
存储 数据处理 数据库
C#三层架构
DAL(Data Access Layer),数据访问层。与数据库打交道。访问数据库,对数据表进行Select,Insert,Update,Delete操作,并且将处理后的数据保存到数据库
|
SQL 数据库 C#
C#&SQL Server基于三层架构实现增删改查
C#&SQL Server基于三层架构实现增删改查
697 0
C#&SQL Server基于三层架构实现增删改查
|
开发框架 前端开发 NoSQL
基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)
云LIS系统是将各种样本、免疫、临检、放免、及实验用的分析仪器,通过网络管理和传输实验分析过程中全部数据。对每一专业,实现检验申请、样本采集、样本核收、联机检验、质量控制、报告审核到报告发布的全环节的信息化管理平台。
297 0
|
程序员 C# 开发者
C#语法——委托,架构的血液
本篇文章主要介绍委托的应用。委托是大家最常见的语法了,但会用与精通之间的差别是巨大的。一个程序员如果不能精通委托,那么,他永远无法成为高级程序员。所以,让我们把委托刻到血液里吧。这样,你才能称为[Developer]。
3780 0
|
C# 数据库 C++
VS中C#连接SQLite数据库处理器架构“x86”不匹配的问题
原文链接 https://www.cnblogs.com/zhaoliankun/p/9088200.html 我的环境配置:windows 64,VS,SQLite(点击下载),System.Data.SQLite.DLL(点击下载)。
1781 0
下一篇
无影云桌面