反射+泛型+缓存 ASP.NET的数据层通用类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了反射+泛型+缓存 ASP.NET的数据层通用类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8027字,纯文字阅读大概需要12分钟。
内容图文
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Reflection ; 5 using System.Data ; 6 using BaiChang.HealBlog.Model ; 7 using System.Data.SqlClient; 8 using BaiChang.SqlDBUtility; 9 10 namespace BaiChang.Middle.Front 11 { 12 public class DataAccess<T>where T:new() 13 { 14#region Main Part 15 16publicstatic DataAccess<T> GetDataAccess() 17 { 18string name = "DataAccess" + typeof(T).Name; 19 DataAccess<T> tObj = Utils.CurrentPage.Cache[name] as DataAccess<T>; 20 21object obj = newobject(); 22if (tObj == null) 23 { 24 Utils.CurrentPage.Cache[name] = typeof(DataAccess < T>).Assembly.CreateInstance(typeof(DataAccess<T>).Name); 25 tObj = Utils.CurrentPage.Cache[name] as DataAccess<T>; 26 } 27return tObj; 28 } 29 30publicstaticstring ToSetString(string name) 31 { 32string formate = "{0}={1}"; 33returnstring.Format(formate, name, name); 34 } 35 36publicstatic List<T> ToModel(SqlDataReader reader) 37 { 38 Dictionary<string, PropertyInfo> ps = new Dictionary<string, PropertyInfo>(); 39foreach (PropertyInfo p intypeof (T).GetProperties ()) 40 { 41 ps.Add(p.Name, p); 42 } 43 44 List<T> ms=new List<T> (); 45while (reader.Read()) 46 { 47 T m = new T(); 48object[] objs = null; 49int count = reader.GetValues(objs); 50int i = 0; 51foreach (object o in objs) 52 { 53 ps[reader.GetName(i)].SetValue(m, o, null); 54 i++; 55 } 56 ms.Add(m); 57 } 58return ms; 59 } 60#region Properties 61//当前实体类型 62 Type entityType; 63 Type type 64 { 65get 66 { 67if(entityType ==null) 68 entityType = typeof(T); 69return entityType; 70 } 71 } 72 73//实体的所有属性 74 PropertyInfo[] propertyInfos; 75 PropertyInfo[] pros 76 { 77get 78 { 79if (propertyInfos == null) propertyInfos = this.type.GetProperties(); 80return propertyInfos; 81 } 82 } 83 84//相对应的表名 85string _tableName=string.Empty ; 86string tableName 87 { 88get 89 { 90if (_tableName == string.Empty) 91 { 92string className = typeof(T).Name; 93 94switch (className) 95 { 96case"Users": 97case"Role_Node_Permissions": 98 _tableName = "PE_" + className; 99default: 100 _tableName = "HB_" + className; 101 } 102 } 103 } 104 } 105#endregion106#endregion107108109#region 成员方法 110111///<summary>112/// 得到最大ID 113///</summary>114publicint GetMaxId() 115 { 116return DbHelperSQL.GetMaxID(pros[0].Name , tableName); 117 } 118119///<summary>120/// 得到最大值 121///</summary>122123///<summary>124/// 是否存在该记录 125///</summary>126publicbool Exists(int ID) 127 { 128 StringBuilder strSql = new StringBuilder(); 129 strSql.Append("select count(1) from "); 130 strSql.Append(tableName); 131 strSql.Append(" where "); 132 strSql.Append(ToSetString(pros[0].Name)); 133 SqlParameter[] parameters = { 134new SqlParameter("@"+pros[0].Name, SqlDbType.Int,4)}; 135 parameters[0].Value = ID; 136137return DbHelperSQL.Exists(strSql.ToString(), parameters); 138 } 139140141///<summary>142/// 增加一条数据 143///</summary>144publicint Add(T model) 145 { 146 StringBuilder strSql = new StringBuilder(); 147148 strSql .Append ("insert into "); 149 strSql .Append (tableName ); 150 strSql.Append(" ("); 151152//生成XXXvalues(XXX)153int i=1; 154foreach (PropertyInfo p in pros) 155 { 156 strSql .Append (p.Name ); 157if (i != pros.Length) 158 strSql.Append(","); 159 i++; 160 } 161 strSql.Append(") values ("); 162 i = 1; 163foreach (PropertyInfo p in pros) 164 { 165 strSql.Append("@"); 166 strSql.Append(p.Name); 167if (i != pros.Length) 168 strSql.Append(","); 169 i++; 170 } 171 strSql.Append(");select @@IDENTITY"); 172173//生成sqlparameters174 List<SqlParameter> sqlpars = new List<SqlParameter>(); 175foreach (PropertyInfo p in pros) 176 { 177 SqlParameter sp = new SqlParameter("@" + p.Name, p.GetValue(model, null)); 178 sqlpars.Add(sp); 179 } 180object obj = DbHelperSQL.GetSingle(strSql.ToString(), sqlpars .ToArray ()); 181if (obj == null) 182 { 183return1; 184 } 185else186 { 187return Convert.ToInt32(obj); 188 } 189 } 190191///<summary>192/// 更新一条数据 193///</summary>194publicvoid Update(T model) 195 { 196 StringBuilder strSql = new StringBuilder(); 197 strSql.Append("update "); 198 strSql .Append (tableName ); 199 strSql .Append (" set "); 200int i=1; 201foreach (PropertyInfo p in pros) 202 { 203 strSql.Append(ToSetString(p.Name)); 204if(i!=pros.Length ) 205 strSql .Append (","); 206 i++; 207 } 208 strSql.Append(" where "); 209 strSql.Append(ToSetString(pros[0].Name)); 210//生成sqlparameters211 List<SqlParameter> sqlpars = new List<SqlParameter>(); 212foreach (PropertyInfo p in pros) 213 { 214 SqlParameter sp = new SqlParameter("@" + p.Name, p.GetValue(model, null)); 215 sqlpars.Add(sp); 216 } 217218 DbHelperSQL.ExecuteSql(strSql.ToString(), sqlpars .ToArray()); 219 } 220221///<summary>222/// 删除一条数据 223///</summary>224publicvoid Delete(int ID) 225 { 226227 StringBuilder strSql = new StringBuilder(); 228 strSql.Append("delete from "); 229 strSql.Append(tableName); 230 strSql.Append(" where "); 231 strSql.Append(ToSetString(pros[0].Name)); 232 SqlParameter[] parameters = { 233new SqlParameter("@"+pros [0].Name, SqlDbType.Int,4)}; 234 parameters[0].Value = ID; 235236 DbHelperSQL.ExecuteSql(strSql.ToString(), parameters); 237 } 238239240///<summary>241/// 得到一个对象实体 242///</summary>243public T GetModel(int ID) 244 { 245246 StringBuilder strSql = new StringBuilder(); 247 strSql.Append("select top 1 "); 248int i=1; 249foreach (PropertyInfo p in pros) 250 { 251 strSql.Append(ToSetString(p.Name)); 252if(i!=pros.Length ) 253 strSql .Append (","); 254 } 255 strSql .Append (tableName ); 256 strSql.Append(" where "); 257 strSql.Append(ToSetString(pros[0].Name)); 258 SqlParameter[] parameters = { 259new SqlParameter("@"+pros[0].Name, SqlDbType.Int,4)}; 260 parameters[0].Value = ID; 261 List<T> ms; 262using (SqlDataReader reader = DbHelperSQL.ExecuteReader(strSql.ToString (), parameters)) 263 { 264 ms= ToModel(reader); 265 reader.Close(); 266 } 267if (ms.Count > 0) return ms[0]; 268elsereturndefault (T); 269 } 270271///<summary>272/// 获得数据列表 273///</summary>274public List<T> GetList(string strWhere) 275 { 276 StringBuilder strSql = new StringBuilder(); 277 strSql.Append("select * "); 278 strSql.Append(" FROM "); 279 strSql.Append(tableName); 280if (strWhere.Trim() != "") 281 { 282 strSql.Append(" where " + strWhere); 283 } 284285 List<T> ms; 286using (SqlDataReader reader = DbHelperSQL.ExecuteReader(strSql.ToString ())) 287 { 288 ms = ToModel(reader); 289 reader.Close(); 290 } 291if (ms.Count > 0) return ms; 292elsereturnnull; 293 } 294295///<summary>296/// 获得前几行数据 297///</summary>298public List<T> GetList(int Top, string strWhere, string filedOrder) 299 { 300 StringBuilder strSql = new StringBuilder(); 301 strSql.Append("select "); 302if (Top > 0) 303 { 304 strSql.Append(" top " + Top.ToString()); 305 } 306 strSql.Append(" * "); 307 strSql.Append(" FROM "); 308 strSql.Append(tableName); 309if (strWhere.Trim() != "") 310 { 311 strSql.Append(" where " + strWhere); 312 } 313 strSql.Append(" order by " + filedOrder); 314 List<T> ms; 315using (SqlDataReader reader = DbHelperSQL.ExecuteReader(strSql.ToString ())) 316 { 317 ms = ToModel(reader); 318 reader.Close(); 319 } 320if (ms.Count > 0) return ms; 321elsereturnnull; 322 } 323324325326///<summary>327///分页获取数据列表 328///</summary>329public List<T> GetList(int PageSize,int PageIndex,string strWhere) 330 { 331 List<T> ms=GetList(strWhere); 332int startIndex=0, endIndex=0; 333 Utils.GetPageArea(ref startIndex, ref endIndex, PageIndex, PageSize, ms.Count); 334 List<T> result = new List<T>(); 335for (int i = startIndex; i <= endIndex; i++) 336 { 337 result.Add(ms[i]); 338 } 339return result; 340 } 341342#endregion 成员方法 343344345 } 346 }
一点想法+一点尝试
还有些问题有待解决^_^
作者:today4king
转载:http://www.cnblogs.com/jinzhao/archive/2009/07/24/1530213.html
原文:http://www.cnblogs.com/luyuwei/p/4503801.html
内容总结
以上是互联网集市为您收集整理的反射+泛型+缓存 ASP.NET的数据层通用类全部内容,希望文章能够帮你解决反射+泛型+缓存 ASP.NET的数据层通用类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。