分享
 
 
 

的通用DAL层

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

自己写的访问SqlServer数据库的通用DAL层如题,直接贴代码.

首先是DataTable转List<T>的方法,这个方法通用性极强.

1 #region Table转List 2 /// <summary> 3 /// Table转List 4 /// </summary> 5 /// <typeparam name="T"></typeparam> 6 /// <param name="dt"></param> 7 /// <returns></returns> 8 public static List<T> TableToList<T>(DataTable dt) where T : new() 9 {10 // 定义集合11 IList<T> list = new List<T>();12 13 // 获得此模型的类型14 Type type = typeof(T);15 16 foreach (DataRow dr in dt.Rows)17 {18 T t = new T();19 20 // 获得公共属性21 PRopertyInfo[] propertys = t.GetType().GetProperties();22 23 foreach (PropertyInfo pi in propertys)24 {25 // 判断此属性是否有Setter26 if (!pi.CanWrite) continue;27 28 object value = dr[pi.Name];29 if (value != DBNull.Value)30 pi.SetValue(t, value, null);31 }32 33 list.Add(t);34 }35 return list.ToList();36 }37 #endregion

View Code下面贴出主要代码

1 /// <summary> 2 /// 数据访问基类:BaseService 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public class BaseService<T> : IBaseService<T> where T : class ,new() 6 { 7 /// <summary> 8 /// 得到某列最大值 9 /// </summary> 10 /// <param name="connection"></param> 11 /// <param name="fieldname"></param> 12 /// <returns></returns> 13 public virtual int GetMax(string connection,string fieldname) 14 { 15 #region 参数 16 T entity = new T(); 17 SqlParameter[] parameters = new SqlParameter[] 18 { 19 new SqlParameter("@fieldname",fieldname) 20 }; 21 #endregion 22 23 StringBuilder sqlStr=new StringBuilder(); 24 sqlStr.Append("select max("); 25 sqlStr.Append("@fieldname"); 26 sqlStr.Append(") from "); 27 sqlStr.Append(entity.GetType().Name); 28 29 return int.Parse(Databaseaccess.SqlHelper.ExecuteDataSetText(connection, sqlStr.ToString(), parameters).Tables[0].Rows[0][0].ToString()); 30 } 31 32 /// <summary> 33 /// 是否存在该记录 34 /// </summary> 35 /// <param name="connection">连接字符串</param> 36 /// <param name="primarykey">主键值</param> 37 /// <returns></returns> 38 public virtual bool Exists(string connection, object primarykey) 39 { 40 #region 参数 41 T entity = new T(); 42 43 string primaryKey = GetPrimarykey(connection, entity); 44 List<SqlParameter> parameters = new List<SqlParameter>(); 45 parameters.Add(new SqlParameter("@" + primaryKey, primarykey)); 46 #endregion 47 48 StringBuilder sqlStr = new StringBuilder(); 49 sqlStr.Append("select count(1) from "); 50 sqlStr.Append(entity.GetType().Name); 51 sqlStr.Append(" where "); 52 sqlStr.Append(primaryKey + "=@" + primaryKey); 53 54 int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); 55 if (res > 0) 56 return true; 57 else 58 return false; 59 } 60 61 /// <summary> 62 /// 增加一条数据 63 /// </summary> 64 public virtual bool Add(string connection, T entity) 65 { 66 #region 参数 67 List<SqlParameter> parameters = new List<SqlParameter>(); 68 string fields = ""; 69 string placeholders = ""; 70 foreach (var item in entity.GetType().GetProperties()) 71 { 72 fields += item.Name + ","; 73 placeholders += "@" + item.Name + ","; 74 75 SqlParameter parameter = new SqlParameter(); 76 parameter.ParameterName = "@" + item.Name; 77 parameter.Value = item.GetValue(entity, null); 78 parameters.Add(parameter); 79 } 80 #endregion 81 82 StringBuilder sqlStr = new StringBuilder(); 83 sqlStr.Append("insert " + entity.GetType().Name + " ("); 84 sqlStr.Append(fields.Substring(0, fields.Length - 1) + ")"); 85 sqlStr.Append(" values ("); 86 sqlStr.Append(placeholders.Substring(0, placeholders.Length - 1) + ")"); 87 88 int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray()); 89 if (res > 0) 90 return true; 91 else 92 return false; 93 } 94 95 /// <summary> 96 /// 更新一条数据 97 /// </summary> 98 /// <param name="connection">连接字符串</param> 99 /// <param name="entity">类</param>100 /// <returns></returns>101 public virtual bool Update(string connection, T entity)102 {103 #region 参数104 string primaryKey = GetPrimarykey(connection, entity);105 List<SqlParameter> parameters = new List<SqlParameter>();106 parameters.Add(new SqlParameter("@"+primaryKey, entity.GetType().GetProperty(primaryKey).GetValue(entity,null)));107 string fields = "";108 foreach (var item in entity.GetType().GetProperties())109 {110 if (item.Name != primaryKey)111 {112 fields += item.Name + "=@" + item.Name + ",";113 114 SqlParameter parameter = new SqlParameter();115 parameter.ParameterName = "@" + item.Name;116 parameter.Value = item.GetValue(entity, null);117 parameters.Add(parameter);118 }119 }120 #endregion121 122 StringBuilder sqlStr = new StringBuilder();123 sqlStr.Append("update " + entity.GetType().Name);124 sqlStr.Append(" set ");125 sqlStr.Append(fields.Substring(0,fields.Length-1));126 sqlStr.Append(" where ");127 sqlStr.Append(primaryKey + "=@" + primaryKey);128 129 int res = DatabaseAccess.SqlHelper.ExecteNonQueryText(connection, sqlStr.ToString(), parameters.ToArray());130 if (res > 0)131 return true;132 else133 return false;134 }135 136 /// <summary>137 /// 删除一条数据138 /// </summary>139 /// <param name="connection">连接字符串</param>140 /// <param name="primaryKey">主键值</param>141 /// <returns></returns>142 public virtual bool Delete(string connection, o

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有