asp.net 3.三层架构
1.新建项目和类库
CZBK.ItcastProject (空白项目)
CZBK.ItcastProject.BLL (类库) -- 逻辑业务
CZBK.ItcastProject.Common (类库) -- 工具层
CZBK.ItcastProject.DAL
CZBK.ItcastProject.Model
CZBK.ItcastProject.WebApp -- web项目
2. DAL
2.1 SqlHelper类 :ADO.Net 连接数据库的相关
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace CZBK.ItcastProject.DAL { public class SqlHelper { private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; public static DataTable GetDataTable(string sql,CommandType type,params SqlParameter[]pars) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlDataAdapter apter = new SqlDataAdapter(sql, conn)) { if (pars != null) { apter.SelectCommand.Parameters.AddRange(pars); } apter.SelectCommand.CommandType = type; DataTable da = new DataTable(); apter.Fill(da); return da; } } } public static int ExecuteNonquery(string sql, CommandType type, params SqlParameter[] pars) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { if (pars != null) { cmd.Parameters.AddRange(pars); } cmd.CommandType = type; conn.Open(); return cmd.ExecuteNonQuery(); } } } } }
2.UserInfoDall类 针对表对象UserInfo的SQL语句操作,增删改查,还有将datatable转成对象
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace CZBK.ItcastProject.DAL { public class UserInfoDal { /// <summary> /// 获取用户列表 /// </summary> /// <returns></returns> public List<UserInfo> GetList() { string sql = "select * from UserInfo"; DataTable da = SqlHelper.GetDataTable(sql, CommandType.Text); List<UserInfo> list = null; if (da.Rows.Count > 0) { list = new List<UserInfo>(); UserInfo userInfo = null; foreach (DataRow row in da.Rows) { userInfo = new UserInfo(); LoadEntity(userInfo, row); list.Add(userInfo); } } return list; } /// <summary> /// 获取一条用户信息 By ID /// </summary> /// <param name="id"></param> /// <returns></returns> public UserInfo GetDeail(int id) { string sql = "SELECT id,username,userpass,regtime,email FROM UserInfo where id = @id"; SqlParameter [] pars ={ new SqlParameter("@id",SqlDbType.Int) }; pars[0].Value=id; DataTable dt = SqlHelper.GetDataTable(sql, CommandType.Text, pars); UserInfo instance = null; if(dt.Rows.Count>0) { instance = new UserInfo(); LoadEntity(instance, dt.Rows[0]); } return instance; } /// <summary> /// 添加用户信息 /// </summary> /// <param name="userInfo"></param> /// <returns></returns> public int AddUserInfo(UserInfo userInfo) { string sql = "insert into UserInfo(UserName,UserPass,RegTime,Email) values(@UserName,@UserPass,@RegTime,@Email)"; SqlParameter[] pars = { new SqlParameter("@UserName",SqlDbType.NVarChar,32), new SqlParameter("@UserPass",SqlDbType.NVarChar,32), new SqlParameter("@RegTime",SqlDbType.DateTime), new SqlParameter("@Email",SqlDbType.NVarChar,32) }; pars[0].Value = userInfo.UserName; pars[1].Value = userInfo.UserPass; pars[2].Value = userInfo.RegTime; pars[3].Value = userInfo.Email; return SqlHelper.ExecuteNonquery(sql, CommandType.Text, pars); } /// <summary> /// 更新用户信息 /// </summary> /// <param name="userInfo"></param> /// <returns></returns> public int UpdateUserInfo(UserInfo userInfo) { string sql = "UPDATE UserInfo SET username = @username,userpass = @userpass,regtime = @regtime,email = @email WHERE id = @id"; SqlParameter[] pars = { new SqlParameter("@username",SqlDbType.NVarChar,50), new SqlParameter("@userpass",SqlDbType.NVarChar,50), new SqlParameter("@regtime",SqlDbType.DateTime), new SqlParameter("@email",SqlDbType.NVarChar,50), new SqlParameter("@id",SqlDbType.Int) }; pars[0].Value = userInfo.UserName; pars[1].Value = userInfo.UserPass; pars[2].Value = userInfo.RegTime; pars[3].Value = userInfo.Email; pars[4].Value = userInfo.Id; return SqlHelper.ExecuteNonquery(sql, CommandType.Text, pars); } /// <summary> /// 删除用户信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public int DeleteUserInfo(int id) { string sql = "DELETE FROM UserInfo WHERE id = @id"; SqlParameter[] pars ={ new SqlParameter("@id",SqlDbType.Int) }; pars[0].Value = id; return SqlHelper.ExecuteNonquery(sql, CommandType.Text, pars); } private void LoadEntity(UserInfo userInfo, DataRow row) { userInfo.UserName = row["UserName"] != DBNull.Value ? row["UserName"].ToString() : string.Empty; userInfo.UserPass = row["UserPass"] != DBNull.Value ? row["UserPass"].ToString() : string.Empty; userInfo.Email = row["Email"] != DBNull.Value ? row["Email"].ToString() : string.Empty; userInfo.Id = Convert.ToInt32(row["ID"]); userInfo.RegTime = row["RegTime"] != DBNull.Value ? Convert.ToDateTime(row["RegTime"]) : DateTime.Now; } } }
3.Model
3.1 UserInfo类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CZBK.ItcastProject.Model { public class UserInfo { public int Id { get; set; } public string UserName { get; set; } public string UserPass { get; set; } public DateTime RegTime { get; set; } public string Email { get; set; } } }
4. Common
4.1 CacheControl类 --> .net框架 HttpRuntime.Cache缓存类的操作
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Caching; namespace CZBK.ItcastProject.Common { public class CacheControl { private static string devMode; public static TimeSpan DefaultCacheTime() { return new TimeSpan(5, 0, 0); } public static T Get<T>() where T : new() { string fullName = typeof(T).FullName; object cache = GetCache(fullName); if (cache == null) { T objObject = (T)Activator.CreateInstance(typeof(T)); SetCache(fullName, objObject, DefaultCacheTime()); return objObject; } return (T)cache; } public static object GetCache(string cacheKey) { if (devMode == "Y") { return null; } return HttpRuntime.Cache[cacheKey]; } public static object GetObject(Type type) { string fullName = type.FullName; object cache = GetCache(fullName); if (cache == null) { object objObject = Activator.CreateInstance(type); SetCache(fullName, objObject, DefaultCacheTime()); return objObject; } return cache; } public static object GetObject(Type type, Assembly dll) { string fullName = type.FullName; object cache = GetCache(fullName); if (cache == null) { object objObject = dll.CreateInstance(type.FullName, true); SetCache(fullName, objObject, DefaultCacheTime()); return objObject; } return cache; } public static void RemoveCache(string cacheKey) { HttpRuntime.Cache.Remove(cacheKey); } public static void SetCache(string cacheKey, object objObject, TimeSpan slidingExpiration) { HttpRuntime.Cache.Insert(cacheKey, objObject, null, Cache.NoAbsoluteExpiration, slidingExpiration); } } }
5.BLL
5.1 UserInfoService类 UserInfo表对象的相关业务逻辑, 运用.net缓存Dal层的对象
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CZBK.ItcastProject.DAL; namespace CZBK.ItcastProject.BLL { public class UserInfoService { UserInfoDal UserInfoDal = CZBK.ItcastProject.Common.CacheControl.Get<UserInfoDal>(); /// <summary> /// 返回数据列表 /// </summary> /// <returns></returns> public List<UserInfo> GetList() { return UserInfoDal.GetList(); } /// <summary> /// 返回用户信息 一条 /// </summary> /// <param name="id"></param> /// <returns></returns> public UserInfo GetDeail(int id) { return UserInfoDal.GetDeail(id); } /// <summary> /// 添加数据 /// </summary> /// <param name="userInfo"></param> /// <returns></returns> public bool AddUserInfo(UserInfo userInfo) { return UserInfoDal.AddUserInfo(userInfo)>0; } /// <summary> /// 更新数据 /// </summary> /// <param name="userInfo"></param> /// <returns></returns> public bool UpdateUserInfo(UserInfo userInfo) { return UserInfoDal.UpdateUserInfo(userInfo) > 0; } /// <summary> /// 删除数据 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool DeleteUserInfo(int id) { return UserInfoDal.DeleteUserInfo(id) > 0; } } }
6. UI
6.1 用户列表
UserInfoList.ashx
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; namespace CZBK.ItcastProject.WebApp { /// <summary> /// UserInfoList 的摘要说明 /// </summary> public class UserInfoList : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; BLL.UserInfoService UserInfoService = CZBK.ItcastProject.Common.CacheControl.Get<BLL.UserInfoService>(); List<UserInfo>list= UserInfoService.GetList(); StringBuilder sb = new StringBuilder(); foreach (UserInfo userInfo in list) { sb.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td><a href='ShowDetail.ashx?id={0}'>详细</a></td><td><a href='DeleteUser.ashx?id={0}' class='deletes'>删除</a></td><td><a href='ShowEdit.ashx?id={0}' class='edits'>编辑</a></td></tr>", userInfo.Id, userInfo.UserName, userInfo.UserPass, userInfo.Email, userInfo.RegTime); } //读取模板文件 string filePath = context.Request.MapPath("UserInfoList.html"); string fileCotent = File.ReadAllText(filePath); fileCotent = fileCotent.Replace("@tbody",sb.ToString()); context.Response.Write(fileCotent); } public bool IsReusable { get { return false; } } } }
UserInfoList.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link href="Css/tableStyle.css" rel="stylesheet" /> <script src="Js/jquery-1.7.1.js"></script> <script type="text/javascript"> $(function () { $(".deletes").click(function () { if (!confirm("确定要删除吗?")) { return false; } }); $(".edits").click(function () { if (!confirm("确定要编辑吗?")) { return false; } }); }); </script> </head> <body> <a href="AddUserInfo.html">添加</a> <table> <tr> <th>编号</th> <th>用户名</th> <th>密码</th> <th>邮箱</th> <th>时间</th> <th>详细</th> <th>删除</th> <th>编辑</th> </tr> @tbody </table> </body> </html>
6.2 添加用户
AddUser.ashx
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace CZBK.ItcastProject.WebApp { /// <summary> /// AddUser 的摘要说明 /// </summary> public class AddUser : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string userName=context.Request.Form["txtName"]; string userPwd=context.Request.Form["txtPwd"]; string userEmail=context.Request.Form["txtMail"]; UserInfo userInfo = new UserInfo(); userInfo.UserName = userName; userInfo.UserPass = userPwd; userInfo.Email = userEmail; userInfo.RegTime = DateTime.Now; BLL.UserInfoService UserInfoService = new BLL.UserInfoService(); if (UserInfoService.AddUserInfo(userInfo)) { context.Response.Redirect("UserInfoList.ashx"); } else { context.Response.Redirect("Error.html"); } } public bool IsReusable { get { return false; } } } }
AddUserInfo.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>添加用户</title> </head> <body> <form method="post" action="AddUser.ashx"> 用户名:<input type="text" name="txtName" /><br /> 密码:<input type="password" name="txtPwd" /><br /> 邮箱:<input type="text" name="txtMail" /><br /> <input type="submit" value="添加用户" /> </form> </body> </html>
6.3 删除用户
DeleteUser.ashx
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace CZBK.ItcastProject.WebApp { /// <summary> /// DeleteUser 的摘要说明 /// </summary> public class DeleteUser : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); BLL.UserInfoService UserInfoService = CZBK.ItcastProject.Common.CacheControl.Get<BLL.UserInfoService>(); string id = context.Request.QueryString["id"]; int iid; if (int.TryParse(id, out iid)) { if (UserInfoService.DeleteUserInfo(iid)) { context.Response.Redirect("UserInfoList.ashx"); } else { context.Response.Redirect("Error.html"); } } else { context.Response.Redirect("Error.html"); } } public bool IsReusable { get { return false; } } } }
6.4 显示用户详细信息
ShowDetail.ashx
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using CZBK.ItcastProject.Model; namespace CZBK.ItcastProject.WebApp { /// <summary> /// ShowDetail 的摘要说明 /// </summary> public class ShowDetail : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //context.Response.Write("Hello World"); BLL.UserInfoService UserInfoService = CZBK.ItcastProject.Common.CacheControl.Get<BLL.UserInfoService>(); string id = context.Request.QueryString["id"]; int iid; if (int.TryParse(id, out iid)) { UserInfo instance = UserInfoService.GetDeail(Convert.ToInt32(id)); //读取模板文件 string filePath = context.Request.MapPath("ShowDetail.html"); string fileCotent = File.ReadAllText(filePath); fileCotent = fileCotent.Replace("$username", instance.UserName).Replace("$pwd", instance.UserPass).Replace("$email", instance.Email); context.Response.Write(fileCotent); } else { context.Response.Redirect("Error.html"); } } public bool IsReusable { get { return false; } } } }
ShowDetail.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form> 用户名:<input type="text" name="txtName" value="$username" readonly="readonly" /><br /> 密码:<input type="password" name="txtPwd" value="$pwd" readonly="readonly" /><br /> 邮箱:<input type="text" name="txtMail" value="$email" readonly="readonly" /><br /> </form> </body> </html>
6.5 编辑用户
ShowEdit.ashx
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; namespace CZBK.ItcastProject.WebApp { /// <summary> /// ShowEdit 的摘要说明 /// </summary> public class ShowEdit : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //context.Response.Write("Hello World"); BLL.UserInfoService UserInfoService = CZBK.ItcastProject.Common.CacheControl.Get<BLL.UserInfoService>(); string id = context.Request.QueryString["id"]; int iid; if (int.TryParse(id, out iid)) { UserInfo instance = UserInfoService.GetDeail(Convert.ToInt32(id)); //读取模板文件 string filePath = context.Request.MapPath("ShowEdit.html"); string fileCotent = File.ReadAllText(filePath); fileCotent = fileCotent.Replace("$username", instance.UserName).Replace("$pwd", instance.UserPass).Replace("$email", instance.Email).Replace("$hid_id", id); context.Response.Write(fileCotent); } else { context.Response.Redirect("Error.html"); } } public bool IsReusable { get { return false; } } } }
ShowEdit.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form method="post" action="UpdateUser.ashx"> 用户名:<input type="text" name="txtName" value="$username" /><br /> 密码:<input type="password" name="txtPwd" value="$pwd" /><br /> 邮箱:<input type="text" name="txtMail" value="$email" /><br /> <input type="hidden" name="hid_id" value="$hid_id" /> <input type="submit" value="更新用户" /> </form> </body> </html>
UpdateUser.ashx
using CZBK.ItcastProject.Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace CZBK.ItcastProject.WebApp { /// <summary> /// UpdateUser 的摘要说明 /// </summary> public class UpdateUser : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string userName = context.Request.Form["txtName"]; string userPwd = context.Request.Form["txtPwd"]; string userEmail = context.Request.Form["txtMail"]; string id = context.Request.Form["hid_id"]; UserInfo userInfo = new UserInfo(); userInfo.Id = Convert.ToInt32(id); userInfo.UserName = userName; userInfo.UserPass = userPwd; userInfo.Email = userEmail; userInfo.RegTime = DateTime.Now; BLL.UserInfoService UserInfoService = new BLL.UserInfoService(); if (UserInfoService.UpdateUserInfo(userInfo)) { context.Response.Redirect("UserInfoList.ashx"); } else { context.Response.Redirect("Error.html"); } } public bool IsReusable { get { return false; } } } }
You are never too old to set another goal or to dream a new dream!!!