访问SQLServer的通用DAL层

    xiaoxiao2021-03-26  4

    首先是DataTable转List<T>的方法,这个方法通用性极强. #region Table转List /// <summary> /// Table转List /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static List<T> TableToList<T>(DataTable dt) where T : new() { // 定义集合 IList<T> list = new List<T>(); // 获得此模型的类型 Type type = typeof(T); foreach (DataRow dr in dt.Rows) { T t = new T(); // 获得公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { // 判断此属性是否有Setter if (!pi.CanWrite) continue; object value = dr[pi.Name]; if (value != DBNull.Value) pi.SetValue(t, value, null); } list.Add(t); } return list.ToList(); } #endregion /// <summary> /// 数据访问基类:BaseService /// </summary> /// <typeparam name="T"></typeparam> public class BaseService<T> : IBaseService<T> where T : class ,new() { /// <summary> /// 得到某列最大值 /// </summary> /// <param name="connection"></param> /// <param name="fieldname"></param> /// <returns></returns> public virtual int GetMax(string connection,string fieldname) { #region 参数 T entity = new T(); SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@fieldname",fieldname) }; #endregion StringBuilder sqlStr=new StringBuilder(); sqlStr.Append("select max("); sqlStr.Append("@fieldname"); sqlStr.Append(") from "); sqlStr.Append(entity.GetType().Name); return int.Parse(DatabaseAccess.SqlHelper.ExecuteDataSetText(connection, sqlStr.ToString(), parameters).Tables[0].Rows[0][0].ToString()); } /// <summary> /// 是否存在该记录 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="primarykey">主键值</param> /// <returns></returns> public virtual bool Exists(string connection, object primarykey) { #region 参数 T entity = new T(); string primaryKey = GetPrimarykey(connection, entity); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@" + primaryKey, primarykey)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("select count(1) from "); sqlStr.Append(entity.GetType().Name); sqlStr.Append(" where "); sqlStr.Append(primaryKey + "=@" + primaryKey); int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); if (res > 0) return true; else return false; } /// <summary> /// 增加一条数据 /// </summary> public virtual bool Add(string connection, T entity) { #region 参数 List<SqlParameter> parameters = new List<SqlParameter>(); string fields = ""; string placeholders = ""; foreach (var item in entity.GetType().GetProperties()) { fields += item.Name + ","; placeholders += "@" + item.Name + ","; SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@" + item.Name; parameter.Value = item.GetValue(entity, null); parameters.Add(parameter); } #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("insert " + entity.GetType().Name + " ("); sqlStr.Append(fields.Substring(0, fields.Length - 1) + ")"); sqlStr.Append(" values ("); sqlStr.Append(placeholders.Substring(0, placeholders.Length - 1) + ")"); int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); if (res > 0) return true; else return false; } /// <summary> /// 更新一条数据 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="entity">类</param> /// <returns></returns> public virtual bool Update(string connection, T entity) { #region 参数 string primaryKey = GetPrimarykey(connection, entity); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@"+primaryKey, entity.GetType().GetProperty(primaryKey).GetValue(entity,null))); string fields = ""; foreach (var item in entity.GetType().GetProperties()) { if (item.Name != primaryKey) { fields += item.Name + "=@" + item.Name + ","; SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@" + item.Name; parameter.Value = item.GetValue(entity, null); parameters.Add(parameter); } } #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("update " + entity.GetType().Name); sqlStr.Append(" set "); sqlStr.Append(fields.Substring(0,fields.Length-1)); sqlStr.Append(" where "); sqlStr.Append(primaryKey + "=@" + primaryKey); int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); if (res > 0) return true; else return false; } /// <summary> /// 删除一条数据 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="primaryKey">主键值</param> /// <returns></returns> public virtual bool Delete(string connection, object primarykey) { #region 参数 T entity = new T(); string primaryKey = GetPrimarykey(connection, entity); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@" + primaryKey, primarykey)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("delete from "); sqlStr.Append(entity.GetType().Name); sqlStr.Append(" where "); sqlStr.Append(primaryKey + "=@" + primaryKey); int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); if (res > 0) return true; else return false; } /// <summary> /// 删除多条数据 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="base_idlist">主键值列表</param> /// <returns></returns> public virtual bool DeleteList(string connection, List<object> primarykeys) { #region 参数 T entity = new T(); string primaryKey = GetPrimarykey(connection, entity); string primaryKeys = ""; foreach(var item in primarykeys) { primaryKeys += item.ToString(); } List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@" + primaryKey, primaryKeys)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("delete from "); sqlStr.Append(entity.GetType().Name); sqlStr.Append(" where "); sqlStr.Append(primaryKey + " in(@" + primaryKey + ")"); int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); if (res > 0) return true; else return false; } /// <summary> /// 得到一个对象实体 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="primarykey">主键值</param> /// <returns></returns> public virtual T GetModel(string connection, object primarykey) { #region 参数 T entity = new T(); string primaryKey = GetPrimarykey(connection, entity); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@table", entity.GetType().Name)); parameters.Add(new SqlParameter("@" + primaryKey, primarykey)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("select * from "); sqlStr.Append(entity.GetType().Name); sqlStr.Append(" where "); sqlStr.Append(primaryKey + "=@" + primaryKey); return Common.ToList.TableToList<T>(DatabaseAccess.SqlHelper.ExecuteDataSetText(connection, sqlStr.ToString(), parameters.ToArray()).Tables[0]).FirstOrDefault(); } /// <summary> /// 获得数据列表 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="strWhere">查询条件</param> /// <returns></returns> public virtual List<T> GetList(string connection, string strWhere) { #region 参数 T entity = new T(); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@where", strWhere)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("select * from "); sqlStr.Append(entity.GetType().Name); if (strWhere.Trim().Length > 0) sqlStr.Append(" where @where"); return Common.ToList.TableToList<T>(DatabaseAccess.SqlHelper.ExecuteDataSetText(connection, sqlStr.ToString(), parameters.ToArray()).Tables[0]); } /// <summary> /// 获得总数 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="strWhere">查询条件</param> /// <returns></returns> public virtual int GetRecordCount(string connection, string strWhere) { #region 参数 T entity = new T(); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter("@where", strWhere)); #endregion StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("select count(1) FROM "); sqlStr.Append(entity.GetType().Name); if (strWhere.Trim().Length > 0) sqlStr.Append(" where @where"); return int.Parse(DatabaseAccess.SqlHelper.ExecuteScalarText(connection, sqlStr.ToString(), parameters.ToArray()).ToString()); } /// <summary> /// 执行sql语句 /// </summary> /// <param name="connection"></param> /// <param name="cmdtype"></param> /// <param name="sql"></param> /// <param name="parameters"></param> /// <returns></returns> public virtual int ExecteNonQuerySQL(string connection, CommandType cmdtype, string sql, params SqlParameter[] parameters) { return DatabaseAccess.SqlHelper.ExecteNonQuery(connection, cmdtype, sql, parameters); } /// <summary> /// 获取类主键 /// </summary> /// <param name="connection">连接字符串</param> /// <param name="entity">类</param> /// <returns></returns> public virtual string GetPrimarykey(string connection, T entity) { StringBuilder sqlStr = new StringBuilder(); sqlStr.Append("EXEC sp_pkeys @table_name='" + entity.GetType().Name + "'"); SqlParameter[] parameters = new SqlParameter[] { }; return DatabaseAccess.SqlHelper.ExecuteDataSetText(connection,sqlStr.ToString(),parameters).Tables[0].Rows[0]["COLUMN_NAME"].ToString(); } /// <summary> /// 执行sql语句 /// </summary> /// <param name="connection"></param> /// <param name="cmdtype"></param> /// <param name="sql"></param> /// <param name="parameters"></param> /// <returns></returns> public virtual DataSet ExecuteDataSetSQL(string connection, CommandType cmdtype, string sql, params SqlParameter[] parameters) { return DatabaseAccess.SqlHelper.ExecuteDataSet(connection, cmdtype, sql, parameters); } }
    转载请注明原文地址: https://ju.6miu.com/read-500253.html

    最新回复(0)