一个三层架构案例的解释_第1页
一个三层架构案例的解释_第2页
一个三层架构案例的解释_第3页
一个三层架构案例的解释_第4页
一个三层架构案例的解释_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、三层构架教务管理系统(修改学生信息为例)一、数据层/DALPublic数据层下的DALMethod.cs类代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;/以上是引用的命名空间namespace DALPublic public class DALMethod /定义类 /定义连接字符串,静态成员 static string sq

2、lcnnstr = "Data Source=; Initial Catalog=高校教务系统; User ID=hfb;Password=123" private SqlConnection sqlcn;/定义连接对象 private SqlCommand sqlcmd;/定义命令对象 private SqlDataAdapter sqlda;/定义数据适配器 private DataTable dt;/定义数据表 public DataTable DAL_SelectDB_Par(string mysqlstr, SqlParameter SQlCMD

3、pas) /定义类方法 /mysqlstr是传递数据库中存储过程名的变量,sqlParameter /sqlParameter是一类方法,定义 public SqlParameter(string parameterName, SqlDbType dbType) /sqlParameter方法作用:用参数名称和数据类型初始化 System.Data.SqlClient.SqlParameter 类的新实例 / parameterName:要映射的参数的名称(用字符串表示)。 /dbType: System.Data.SqlDbType 值之一。是parameterName参数的数据类型。 /提

4、取数据的ADO.NET通用方法 /第一步SqlConnection:创建数据库连接类SqlConnection的对象sqlcn,好比修建湛江到广州的高速公路 sqlcn = new SqlConnection(sqlcnnstr); /第二步SqlCommand A:创建命令类SqlCommand的对象sqlcmd,好比安排运输计划:运输车和货物(SQL命令),运输通道sqlcn sqlcmd = new SqlCommand(mysqlstr, sqlcn);/mysqlstr是数据库存储过程,用字符串表示 /第二步SqlCommand B:设置命令对象执行的SQL代码类型,此处是执行数据库

5、中存储过程 sqlcmd.CommandType = CommandType.StoredProcedure; /第二步SqlCommand C:把外部传递过来的SQL命令对应的参数填充到SqlCommand对象sqlcmd的SqlParameters集合中 foreach (SqlParameter var in SQlCMDpas) sqlcmd.Parameters.Add(var); /第三步SqlDataAdapter:用数据适配器SqlDataAdapter对象sqlda执行SqlCommand对象sqlcmd;适配器SqlDataAdapter好比高速路管理公司 sqlda =

6、new SqlDataAdapter(sqlcmd);/SqlDataAdapter可以隐式打开和关闭SqlConnection /第四步:将执行后的数据结果返回到DataTable对象dt中 this.dt = new DataTable(); sqlda.Fill(this.dt); return this.dt; /该函数返回一个表 public int DAL_OPTableDB_Par(string mysqlstr, SqlParameter SQlCMDpas) /定义:插入、更新、删除数据库中的ADO.NET通用方法,函数返回对DB操作的影响行数 int intmyop; /第

7、一步SqlConnection:创建数据库连接类SqlConnection的对象sqlcn,并显示打开;好比修建湛江到广州的高速公路 sqlcn = new SqlConnection(sqlcnnstr.ToString(); sqlcn.Open(); /第二步SqlCommand A:创建命令类SqlCommand的对象sqlcmd,好比安排运输计划:运输车和货物(SQL命令),运输通道sqlcn sqlcmd = new SqlCommand(mysqlstr, sqlcn); /第二步SqlCommand B:设置命令对象执行的SQL代码类型,此处是执行数据库中存储过程 sqlcmd

8、.CommandType = CommandType.StoredProcedure; /第二步SqlCommand C:把外部传递过来的SQL命令对应的参数填充到SqlCommand对象sqlcmd的SqlParameters集合中 foreach (SqlParameter var in SQlCMDpas) sqlcmd.Parameters.Add(var); /第三步 SqlCommand :SqlCommand对象sqlcmd自己执行ExecuteNonQuery()调用SQL存储过程操作数据库 intmyop= sqlcmd.ExecuteNonQuery(); /返回SQL存储

9、过程操作数据库影响的行数 sqlcn.Close(); return intmyop ; 二、定义全局静态类字段 目的:全局静态类字段在整个解决方案中可用,解决不同项目之间参数传递。使用时自动产生实例强制执行,不需实例化,使作方便。/PublicStaticObject类项目中publicobject.cs类中的代码using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PublicStaticObject public static class PublicStat

10、icvar public static int publicXueShenID; public static int publicBanJieID; 三、通过学院、年级条件提取班级,再根据班级得到该班的具体学生信息以下是界面图。1.先设计界面 根据界面功能分析,得到具有三方面的要求:(1)能从Comobox框中选择年级及学院名称,按提取班级按钮,在左边的dgv控件中,得到相应年级、学院所对应的班级;(2)单击班级在右边的dgv控件中得到该班相应的学生。2.设计存储过程从以述分析,要建立两个存储过程,一是提取年级、学院;二是根据年级、学院,提取班级;三是根据所选班级,提取学生。具体存储过程如下:

11、 /* Object: StoredProcedure dbo.UIL学籍管理_frmOPXueSheng Script Date: 07/30/2012 09:27:32 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO- =- Author:<Author,Name>- Create date: <Create Date,>- Description:<Description,>- =ALTER PROCEDURE dbo.UIL学籍管理_frmOPXueSheng -Type参数是一个标识,用于识别调用哪段

12、存储过程(Type char(100)='',年级 char(10)='',院系ID int=0,班级ID int=0,学生ID int=0) -设置变时参数ASBEGIN if Type='cboNianJi_Load_SelectNianJi'-格式:控件+事件+对DB的操作描述,提取年级信息BEGINSELECT distinct SYS年级表.年级FROM SYS年级表 INNER JOINSYS班级表 ON SYS年级表.年级 = SYS班级表.年级 INNER JOINXJ学生表 ON SYS班级表.班级ID = XJ学生表.班级ID

13、order by SYS年级表.年级 ENDif Type='cboYuanXi_Load_SelectYuanXi'BEGINSELECT distinct SYS学院表.院系ID, ltrim(rtrim(SYS学院表.院系名称) as 院系名称FROM SYS学院表 INNER JOIN SYS专业表 ON SYS学院表.院系ID = SYS专业表.院系ID INNER JOIN SYS班级表 ON SYS专业表.专业ID = SYS班级表.专业ID INNER JOIN XJ学生表 ON SYS班级表.班级ID = XJ学生表.班级IDENDif Type='b

14、tnSelectBanJi_Click_SelectBanJi' -提取班级信息BEGINSELECT SYS班级表.班级ID, SYS班级表.班级名称FROM SYS班级表 INNER JOIN SYS专业表 ON SYS班级表.专业ID = SYS专业表.专业IDwhere SYS班级表.年级=年级 and SYS专业表.院系ID =院系IDENDif Type='dgvBanJi_DoubleClick_SelectXueSheng' -由接收到的班级,提取该班学生BEGINSELECT XJ学生表.学生ID, XJ学生表.班级ID, XJ学生表.学号, XJ学生

15、表.姓名, XJ学生表.性别, XJ学生表.民族, SYS政治面貌.政治面貌名称, XJ学生表.政治面貌IDFROM XJ学生表 INNER JOIN SYS政治面貌 ON XJ学生表.政治面貌ID = SYS政治面貌.政治面貌IDWHERE (XJ学生表.班级ID = 班级ID)END3.设计逻辑层 设计相应的类方法,调用数据层类方法,对数据库进行操作,返回操作结果。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlC

16、lient;using System.Linq;using System.Text;namespace BLL学生信息维护 public class frmOPxueisheng DALPublic.DALMethod myDALPublic = new DALPublic.DALMethod(); /实例化DALPublic.DALMethod()类 /提取年级信息public DataTable cboNianJi_Load_SelectNianJi()/提取年级信息,过程名cboNianJi_Load_SelectNianJi /与存储过程标识符一致 SqlParameter SQlCM

17、Dpas = new SqlParameter("Type", SqlDbType.Char) ; SQlCMDpas0.Value = "cboNianJi_Load_SelectNianJi" /传递标识符参数 /实例化DAL层对应的类,调用DAL类,传入参数 /UIL学籍管理_frmOPXueSheng是存储过程名 DataTable dt = myDALPublic.DAL_SelectDB_Par("UIL学籍管理_frmOPXueSheng", SQlCMDpas); return dt; /该方法返回所查询的表。 /提取

18、院系信息 public DataTable cboYuanXi_Load_SelectYuanXi()/提取院系信息 SqlParameter SQlCMDpas = new SqlParameter("Type", SqlDbType.Char) ; SQlCMDpas0.Value = "cboYuanXi_Load_SelectYuanXi" /实例化DAL层对应的类,调用DAL类,传入参数 DataTable dt = myDALPublic.DAL_SelectDB_Par ("UIL学籍管理1_frmOPXueSheng"

19、, SQlCMDpas); return dt; /提取班级信息 public DataTable btnSelectBanJi_Click_SelectBanJi(string strNianJi, int intYuanXiID)/提取班级信息 SqlParameter SQlCMDpas = new SqlParameter("Type", SqlDbType.Char), /参数的顺序及数据类型 new SqlParameter("年级", SqlDbType.Char), /要与存储过程中的变量 new SqlParameter("院

20、系ID", SqlDbType.Int);/顺序与类类型一致 SQlCMDpas0.Value = "btnSelectBanJi_Click_SelectBanJi" SQlCMDpas1.Value = strNianJi; SQlCMDpas2.Value = intYuanXiID; /实例化DAL层对应的类,调用DAL类,传入参数 DataTable dt = myDALPublic.DAL_SelectDB_Par ("UIL学籍管理1_frmOPXueSheng", SQlCMDpas); return dt; /单击班级dgv,

21、选择班级,提取学生信息 public DataTable dgvBanJi_Click_SelectXueSheng(int intBanJiID)/单击班级dgv,选择班级,提取学生信息 SqlParameter SQlCMDpas = new SqlParameter("Type", SqlDbType.Char), new SqlParameter("班级ID", SqlDbType.Char); SQlCMDpas0.Value = "dgvBanJi_Click_SelectXueSheng" SQlCMDpas1.Valu

22、e = intBanJiID; /实例化DAL层对应的类,调用DAL类,传入参数 DataTable dt = myDALPublic.DAL_SelectDB_Par ("UIL学籍管理1_frmOPXueSheng", SQlCMDpas); return dt; 4.设计界面层代码,调用逻辑层方法,得到数据与相应控件绑定显示出来。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using Sy

23、stem.Linq;using System.Text;using System.Windows.Forms;namespace UIL学生信息维护 public partial class frmOPxueisheng : Form public frmOPxueisheng() InitializeComponent(); private void frmOPxueisheng_Load(object sender, EventArgs e)/初始化combox BLL学生信息维护.frmOPxueisheng myfrmOPXueSheng = new BLL学生信息维护.frmOPxu

24、eisheng(); cboNianji.DataSource = myfrmOPXueSheng.cboNianJi_Load_SelectNianJi();/ comobox的数据源 this.cboNianji.ValueMember = "年级" /与返回的表绑定,真实的值字段 this.cboNianji.DisplayMember = "年级" /显示出来的值字段 cboxueyang.DataSource = myfrmOPXueSheng.cboYuanXi_Load_SelectYuanXi(); this.cboxueyang.Val

25、ueMember = "院系ID" this.cboxueyang.DisplayMember = "院系名称" /单击提取班级,提取班级信息,通过dgv显示出来 private void btnBanJi_Click(object sender, EventArgs e) /单击提取班级,提取班级信息,通过dgv显示出来 string strNianJi = null; int intYuanXiID = 0; intYuanXiID = (int)this.cboxueyang.SelectedValue; BLL学生信息维护.frmOPxueisheng myfrmOPXueSheng = ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论