。
注意:
(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;
}
}
}