[原创] Asp.Net三层体系结构应用实例(2)源代码
[原创] Asp.Net三层体系结构应用实例(2)源代码
代码实现: TUser.cs using System; using System.Collections.Generic; using System.Text; namespace Models { /* 实体类仅定义数据模型,该模型应与数据表对应,属性定义与数据表的字段名一致。 网上有很多3层架构生成工具,实体类生成工具.如大数据表,大量数据表需要建立实体类时,建议使用 实体类生成工具。手工输入是极费时的苦差事。 */ /// <summary> /// 用户模型,实体类. /// </summary> public class TUser { private int _isid = 0; private string _userName; private string _userID; private string _password; public int isid { get { return _isid; } set { _isid = value; } } public string UserID { get { return _userID; } set { _userID = value; } } public string UserName { get { return _userName; } set { _userName = value; } } public string Password { get { return _password; } set { _password = value; } } } } dalUser.cs using System; using System.Collections.Generic; using System.Text; using System.Data; using Models; namespace DataAccessLayer { /***************************************************************** * 3层结构执行顺序:1.WebUI->2.BLL->3.DAL->OleDB->4.SQL SERVER/ACCESS * * 数据访问层(dal)顾名思义该层是与数据库交互的层级。如获取数据,更新数据,插入记录等等。 * 它的上一级是业务逻辑层.业务逻辑层需要操作某数据时,调用数据访问层的接口,数据访问层操作 * OleDb接口访问Access数据库,最后返回数据。 * * *** 注意*** * * 为了方便演示,这里面所有Sql语句都是拼接而成,这种方式极不安全,为黑客注入js脚本提供便利。 * 最好改成传参数的方式。关于如何防范SQL注入,不是本程序涵盖内容。 * * by www.csframework.com - C/S框架网 *****************************************************************/ /// <summary> /// 用户的数据存取层 /// </summary> public class dalUser { private static dalUser _Instance = null; public static dalUser Instance { get { if (_Instance == null) _Instance = new dalUser(); return _Instance; } } /// <summary> /// 获取所有用户列表 /// </summary> /// <returns></returns> public DataTable GetUsers() { string sql = "select * from [t_User]"; return DataProvider.Instance.GetTable(sql, "t_User"); } /// <summary> /// 新增用户 /// </summary> /// <param name="user">用户对象</param> /// <returns></returns> public bool AddUser(TUser user) { //往数据库写入记录 string sql = "insert into [t_User]([UserID],[UserName],[Password]) values (''''{0}'''',''''{1}'''',''''{2}'''') "; sql = string.Format(sql, user.UserID, user.UserName, user.Password); int i = DataProvider.Instance.ExecNoQuery(sql); return i > 0; } /// <summary> /// 用户登录 /// </summary> /// <param name="userID">登录帐号</param> /// <returns></returns> public bool Login(string userID, string password) { string sql = "select count(*) from [t_User] where [UserID]=''''" + userID + "'''' and [Password]=''''" + password + "''''"; object o = DataProvider.Instance.ExecScalar(sql); return int.Parse(o.ToString()) > 0; } /// <summary> /// 检查用户是否存在 /// </summary> /// <param name="userid">用户编号</param> /// <returns></returns> public bool ExistsUser(string userid) { string sql = "select count(*) from [t_User] where [UserID]=''''" + userid + "''''"; object o = DataProvider.Instance.ExecScalar(sql); return int.Parse(o.ToString()) > 0; } } } DataProvider.cs using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.OleDb; namespace DataAccessLayer { /// <summary> /// 数据提供者. /// </summary> public class DataProvider { private static DataProvider _Instance = null; /// <summary> /// 数据提供者对象实例,因程序频繁请求数据,减少创建对象的次数。 /// </summary> public static DataProvider Instance { get { if (_Instance == null) { _Instance = new DataProvider(); } return _Instance; } } private string _dbPath = ""; /// <summary> /// Access数据库路径 /// </summary> public string DBPath { get { return _dbPath; } set { _dbPath = value; } } /// <summary> /// 提供数据表 /// </summary> /// <param name="sql">SQL 查询语句</param> /// <param name="tableName">数据表名</param> /// <returns></returns> public DataTable GetTable(string sql, string tableName) { OleDbConnection conn = this.CreateConnection(); OleDbCommand cmd = new OleDbCommand(sql, conn); OleDbDataAdapter adp = new OleDbDataAdapter(cmd); DataTable dt = new DataTable(tableName); adp.Fill(dt); conn.Close(); conn.Dispose(); return dt; } /// <summary> /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// </summary> /// <param name="sql"></param> /// <returns></returns> public object ExecScalar(string sql) { OleDbConnection conn = this.CreateConnection(); OleDbCommand cmd = new OleDbCommand(sql, conn); object o = cmd.ExecuteScalar(); conn.Close(); conn.Dispose(); return o; } /// <summary> /// 针对 System.Data.OleDb.OleDbCommand.Connection 执行 SQL 语句并返回受影响的行数。 /// </summary> /// <param name="sql"></param> /// <returns></returns> public int ExecNoQuery(string sql) { OleDbConnection conn = this.CreateConnection(); OleDbCommand cmd = new OleDbCommand(sql, conn); int ret = cmd.ExecuteNonQuery(); conn.Close(); conn.Dispose(); return ret; } /// <summary> /// 创建一个OleDbConnection连接. /// </summary> /// <returns></returns> private System.Data.OleDb.OleDbConnection CreateConnection() { string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath; OleDbConnection conn = new OleDbConnection(connStr); if (conn.State != ConnectionState.Connecting) conn.Open(); return conn; } } } bllUser.cs using System; using System.Collections.Generic; using System.Text; using Models; using DataAccessLayer; using BusinessLogicLayer.Roles; using System.Data; namespace BusinessLogicLayer { /// <summary> /// 用户的业务逻辑层 /// </summary> public class bllUser { /// <summary> /// 新增用户 /// </summary> /// <param name="user">用户对象</param> /// <returns></returns> public bool AddUser(TUser user) { //向数据库写入数据之前,检查数据的合法性。比如SQL注入,暴力注入等业务操作。 //如果数据是合法的,可以写入数据了。这种逻辑性操作,是不是属于业务逻辑的范畴呢? UserRole.Validate(user); return dalUser.Instance.AddUser(user); } public bool Login(string userID, string password) { //检查登录信息 UserRole.ValidateLogin(userID, password); //调用数据访问层的接口检查用户登录 return dalUser.Instance.Login(userID, password); } public DataTable GetUsers() { return dalUser.Instance.GetUsers(); } } } UserRole.cs using System; using System.Collections.Generic; using System.Text; using Models; using DataAccessLayer; namespace BusinessLogicLayer.Roles { /// <summary> /// 用户规则。检查数据合法性。 /// </summary> public class UserRole { public static void Validate(TUser user) { if (dalUser.Instance.ExistsUser(user.UserID)) throw new Exception("用户已经存在!"); } public static void ValidateLogin(string userID, string password) { if (userID.Trim() == "") throw new Exception("用户编号不正确或不能为空!"); if (password.Trim() == "") throw new Exception("密码不正确或不能为空!"); } } } Msg.cs using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; /// <summary> /// Summary description for Msg /// </summary> public class Msg { public static void Show(Page curPage, string msg) { curPage.ClientScript.RegisterStartupScript(curPage.GetType(), "msg", "<script>alert(''''" + msg + "'''');</script>"); } } 项目下载: 扫一扫加作者微信
参考文档:
快速创建可复用体系结构 面向服务的体系结构(Service-Oriented Architecture,SOA) [原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码(1) [原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码(2) [原创]C#键盘勾子(Hook),屏蔽键盘活动.(源代码下载) Asp.Net三层体系结构应用实例(附C#源代码) CS系统三层架构扩展支持WCF及策略模式应用(原创) 什么是WCF以及WCF体系结构?|C/S框架网 原创:CodeHighlighter源代码格式化,代码缩进,关键词高亮着色(C#源码) Winform三层架构教程,CS三层结构图及源码实例讲解 C#源代码安全缺陷与提高源代码质量解决方案 C#源码-[博客空间]X3BLOG(ASP.NET开源多用户博客系统) 1.1.0 beta1 源代码_x3blog-源码下载 [电子商务]塞普森电子商务系统2007源代码 (.Net 1.1)_cpushecsopen-源码下载 [论坛社区]塞普森论坛交流系统2007源代码 (.Net 1.1)-源码下载 C#.NET开发软件Winform三层架构代码生成器软件
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |