全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近在CSDN上看到有朋友求Winform的三层架构的示例,网上也确实没有多少是Winform的。于是本人牺牲一点时间,做了这个小Demo,希抛砖引玉,望各路老手不吝指教。 至于什么是“三层结构”、三层结构有什么好处、为什么要用三层结构,我想这些讨论,网上大把,Google 或者 Baidu一下就有一大串。我也就不多说,直接用一个例子来讲述如何实现一个多层架构的WinForm程序。 在该例子,我选用的是VS.net 2005 + Access 实现,考虑至数据库的可移槙性,数据访问层使用工厂模式,利用.net 的反射在运行时根据配置文件来动态决定采用何用数据库。 好了,进入正题: 首先,设定数据库如下 :字段名称 数据类型 默认值 备注说明BS_NO Text N 工号BS_NAME Text N 姓名对于,多层架构,我一般都按照预先新建一个空的方案。然后分别新加EntityReflect(实体层)、DALFactory(数据访问层,工厂类), Business(中间业务层)、WinForm(表示界面层),并设定WinForm为启始专案,该专案为WinForm模板,其它全部可作为 Class Library模板,设定各专案的相依:Business依赖DALFactory、WinForm依赖Business,完了之后,选取整个方案,编译。在Business层引用DALFactory、WinForm层中引用Business.至上上面的数据访问层并没有针对特定的数据库的数据访问类,所以,再加一个DataAccess Class Library层,该层就是专门针对Access数据访问的。同样设定该层依赖DALFactory,并参考引用DALFactory.再次编译一次,我们就进入代码编制阶段了。 其实,我们上面的操作,已基本上具备了我上面所说了这个Demo的全部内容了,只是还没有代码而已啦。好,下面我们就添加代码: 打开EntityReflect专案,将默认的Class1.cs 改为EREmployee.cs,这就是我们的实体规范层,关于这个,我们可以在网上下载一些工具自动生成。不过,在我这个方案,我却一直没有在任何地方引用他。原因其实是我自己也不是很能弄清为什么一定要这个规范层。不过,我还是写了如下的代码:using System;using System.Collections.Generic;using System.Text;namespace EntityReflectpublic class EREmployeepublic EREmployee()private String strbs_no;private String strbs_name;public String strBS_NOget return strbs_no; set strbs_no = value; public String strBS_NAMEget return strbs_name; set strbs_name = value; 展开DALFactory层.新加一个IDataAccessObject.cs,目的是为了规范各种数据库访问数据库时使用相同的方法,该接口的代码如下:using System;using System.Data;namespace DALFactorypublic interface IDataAccessObjectvoid Query(DataSet ds, string strTableName);void Save(string strBS_NO, string strBS_NAME);另外,由于我使用了C#的RTTI,所以,还加了一个类GetDatabaseType.cs,代码如下:using System;using System.Configuration;using System.Reflection;namespace DALFactorypublic class GetDatabaseTypepublic IDataAccessObject GetDatabase()string strAssemblyName = ConfigurationManager.AppSettingsAssemblyName;string strConstractor = ConfigurationManager.AppSettingsConstractor;return (IDataAccessObject)Assembly.Load(strAssemblyName).CreateInstance(strConstractor, false);有了数据访问层的工厂,展开DataAccess数据访问层,将默认的Class1.cs 改为DataAccess.cs,输入以下代码:using System;using System.Data;using System.Data.OleDb;using DALFactory;namespace DataAccesspublic class DAOAccess:IDataAccessObjectprivate const string strConn = Provider = Microsoft.Jet.OLEDB.4.0;Data Source=D:SHS_DevelopSolutionDBSolution.mdb;#region IDataAccessObject 成員public void Query(System.Data.DataSet ds, string strTableName)string strSql = Select * From Employee;using (OleDbConnection Conn = new OleDbConnection(strConn)using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, Conn)adapter.Fill(ds, strTableName);public void Save(string strBS_NO, string strBS_NAME)string strSql = Insert Into Employee(BS_NO,BS_NAME) Values(BS_NO,BS_NAME);using (OleDbConnection Conn = new OleDbConnection(strConn)using (OleDbCommand Comm = new OleDbCommand(strSql, Conn)Comm.Parameters.Add(new OleDbParameter(BS_NO, OleDbType.VarChar,10);Comm.Parameters.Add(new OleDbParameter(BS_NAME, OleDbType.VarChar, 10);Comm.ParametersBS_NO.Value = strBS_NO;Comm.ParametersBS_NAME.Value = strBS_NAME;Conn.Open();Comm.ExecuteNonQuery();Conn.Close();#endregion展开Business层,将Class1.cs改为:BusinessLogic.cs,输入如下代码:using System;using DALFactory;namespace Businesspublic class BusinessLogicpublic void Query(System.Data.DataSet ds, string strTableName)(new GetDatabaseType().GetDatabase().Query(ds, strTableName);public void Save(string strBS_NO, string strBS_NAME)(new GetDatabaseType().GetDatabase().Save(strBS_NO, strBS_NAME);最后,展开WinFrom层,在窗体上拖一个DatagridView、两个label,两个textBox和两个button过来,Name属性分别改为:FrmMain、dgvMain、tbxBS_NO,tbxBS_NAME,btnQuery,btnSave,输入如下代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Business;using RealBusiness;namespace WinFormpublic partial class FrmMain : Formpublic FrmMain()InitializeComponent();private void btnQuery_Click(object sender, EventArgs e)DataSet ds = new DataSet();(new BusinessLogic().Query(ds,Employee);this.dgvMain.DataSource = ds;this.dgvMain.DataMember = Employee;private void bt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025汉中航空实验学校教师招聘备考题库带答案解析
- 2025山东日照经开区招聘社会化工会工作者4人备考题库附答案详解(模拟题)
- 2025天津滨海新区消防救援支队招录政府专职消防员的岗位适应性测试和体能测试备考题库附答案详解
- 2025年福建省福建水利电力职业技术学院招聘高层次人才(公共基础知识)综合能力测试题附答案解析
- 2025宁波市鄞州区公立学校招聘编外员工11人(公共基础知识)测试题附答案解析
- 2025秦风气体招聘考试笔试备考题库及答案解析
- 2025智能工人职业培训系统行业市场前景分析及发展现状研究报告
- 2025智能工业控制系统市场竞争态势报告
- 2025智能家居产品销售渠道资本优化策划
- 2025智能宠物饮水器市场发展分析及投资前景评估研究报告
- 2025广东阳江市阳春市选聘市属国有企业领导人员拟聘用人员笔试历年参考题库附带答案详解
- 盘古开天神话故事学习课件
- 2025年《保密法》知识考试题库及答案解析
- 2025年春季英语教研组工作总结课件
- 2025新疆和田和康县、和安县面向社会招聘事业单位工作人员108人考试笔试参考题库附答案解析
- 吉林省延边州2023-2024学年八年级上学期语文期末考试试卷(含答案)
- 委托代征协议书模板
- 2025年河南才港人力资源服务有限公司招聘审计辅助人员20人考试笔试模拟试题及答案解析
- (2025年)医学检验三基考试试题及答案解析
- 2025-2026学年高二上学期《解码‘十五五’蓝图+青春锚定新征程》主题班会
- 2026湖北水发集团校园招聘笔试考试参考题库及答案解析
评论
0/150
提交评论