。
注意:
(1)DBhelp类 总的CRUD,对应整个数据库表的操作,用以接受具体某一张表传入参数,进行CRUD,并返回结果。
public class DBHelper { private static SqlConnection conn = new SqlConnection("server=.;database=HR;uid=sa;pwd=;"); /// <summary> /// 封装SqlCommand对象的ExecuteNonQuery方法 /// </summary> /// <param name="strsql">传入以insert|update|delete打头的SQL语句</param> /// <returns>返回执行影响的行数</returns> public static int ExecuteNonQuery(string strsql) { SqlCommand comm = new SqlCommand(strsql, conn); try { conn.Open(); return comm.ExecuteNonQuery(); } catch { throw; } finally { conn.Close(); } } /// <summary> /// 返回数据集DataSet /// </summary> /// <param name="strsql">以Select打头的SQL语句</param> /// <returns>返回DataSet对象</returns> public static DataSet GetDataSet(string strsql) { SqlDataAdapter da = new SqlDataAdapter(strsql, conn); DataSet ds = new DataSet(); try { da.Fill(ds); return ds; } catch { throw; } } /// <summary> /// 返回DataTable对象 /// </summary> /// <param name="strsql">以Select打头的SQL语句</param> /// <returns>返回DataTable对象</returns> public static DataTable GetDataTable(string strsql) { DataSet ds = GetDataSet(strsql); if (ds != null) { return ds.Tables[0]; } else return null; } /// <summary> /// 返回首行首列的单元格的值(封装Command对象的ExecuteScalar方法) /// </summary> /// <param name="strsql">Select打头的SQL语句</param> /// <returns>返回的是Object</returns> public static object GetScalar(string strsql) { SqlCommand comm = new SqlCommand(strsql, conn); try { conn.Open(); return comm.ExecuteScalar(); } catch (Exception) { throw; } finally { conn.Close(); } } }
(2)xxxxService,具体某一张表的CRUD 使用方法如下:
第一,使用内部的方法,通过sql得到值。
第二,使用sql查询出并调用内部的方法。
using System; using System.Collections.Generic; using System.Text; using System.Data; using TheOneHR.Models; namespace TheOneHR.DAL { public class UserInfoService { private static IList<UserInfo> GetUsersBySQL(string strsql)//内部方法 泛型集合 { IList<UserInfo> users = new List<UserInfo>(); DataTable dt = DBHelper.GetDataTable(strsql); if (dt != null) { for (int i = 0; i < dt.Rows.Count; i++) { UserInfo user = new UserInfo(); user.Id =int.Parse( dt.Rows[i]["Id"].ToString()); user.User_name = dt.Rows[i]["Users_name"].ToString(); user.User_password = dt.Rows[i]["Users_password"].ToString(); //注意外键列的处理 user.Sys_role = Sys_roleService.GetSys_roleById(int.Parse(dt.Rows[i]["Roleno"].ToString())); users.Add(user); } } return users; } /// <summary> /// 得到所有用户列表 /// </summary> /// <returns></returns> public static IList<UserInfo> GetAllUserInfos() { string strsql = "select * from UserInfo"; return GetUsersBySQL(strsql); } /// <summary> /// 根据用户ID得用户实体 /// </summary> /// <param name="id"></param> /// <returns></returns> public static UserInfo GetUserById(int id) { string strsql = "select * from UserInfo where Id=" + id.ToString(); try { return GetUsersBySQL(strsql)[0]; } catch { return null; } } /// <summary> /// 添加一个用户 /// </summary> /// <param name="user"></param> /// <returns></returns> public static int AddUser(UserInfo user) { string strsql = string.Format("INSERT INTO [UserInfo] ([Users_name],[Users_password] ,[Roleno])VALUES('{0}','{1}',{2})", user.User_name, user.User_password, user.Sys_role.Id); return DBHelper.ExecuteNonQuery(strsql); } /// <summary> /// 修改一个用户信息 /// </summary> /// <param name="user"></param> /// <returns></returns> public static int ModifyUser(UserInfo user) { string strsql = string.Format("UPDATE [UserInfo] SET [Users_name] = '{0}',[Users_password] = '{1}' ,[Roleno] = {2} WHERE Id={3}", user.User_name, user.User_password, user.Sys_role.Id, user.Id); return DBHelper.ExecuteNonQuery(strsql); } /// <summary> /// 删除一个用户 /// </summary> /// <param name="id"></param> /// <returns></returns> public static int DelUser(int id) { string strsql = "delete from UserInfo where Id=" + id.ToString(); return DBHelper.ExecuteNonQuery(strsql); } /// <summary> /// 根据帐号得用户实体 /// </summary> /// <param name="loginId">登录帐号</param> /// <returns></returns> public static UserInfo GetUserByLoginId(string loginId) { string strsql = string.Format("select * from UserInfo where Users_name='{0}'", loginId); try { return GetUsersBySQL(strsql)[0]; } catch { return null; } } } }
注意,每层之间类的使用,第一是:添加引用,第二是:命名空间的导入 ,数据访问层需要使用模型层的数据(模型中的类),在数据访问层需要使用模型层的命名空间
业务逻辑层是对数据访问层的进一步封装。便于界面层访问数据,起桥梁的作用。业务逻辑层需要使用:模型层,数据访问层 的命名空间。
using System; using System.Collections.Generic; using System.Text; using TheOneHR.Models; using TheOneHR.DAL; namespace TheOneHR.BLL { public class UserInfoManager { /// <summary> /// 得到所有用户列表 /// </summary> /// <returns></returns> public static IList<UserInfo> GetAllUserInfos() { return TheOneHR.DAL.UserInfoService.GetAllUserInfos();//使用数据访问层的方法 } /// <summary> /// 根据用户ID得用户实体 /// </summary> /// <param name="id"></param> /// <returns></returns> public static UserInfo GetUserById(int id) { return TheOneHR.DAL.UserInfoService.GetUserById(id); } /// <summary> /// 添加一个用户 /// </summary> /// <param name="user"></param> /// <returns></returns> public static bool AddUser(UserInfo user)//添加成功或失败 { return TheOneHR.DAL.UserInfoService.AddUser(user)>0; //大于0则返回true 等于0则返回false } /// <summary> /// 修改一个用户信息 /// </summary> /// <param name="user"></param> /// <returns></returns> public static bool ModifyUser(UserInfo user) { return TheOneHR.DAL.UserInfoService.ModifyUser(user)>0; } /// <summary> /// 删除一个用户 /// </summary> /// <param name="id"></param> /// <returns></returns> public static bool DelUser(int id) { return TheOneHR.DAL.UserInfoService.DelUser(id)>0; } } }