一,概述:
这个DataHelper 类是基于我上个博客里发的SQLDataAccess 这个类做的一个简单的封装,为了结合自己的实体类和数据操作而产生的。
这里面用了 属性类,反射。还有 数据类型的方法扩展。(入门的同学可以看看。)
这里面有几个地方要注意下,一个是 GetEntity<T> 方法里的 ModelDataAttribute 对象,是我自己写的一个实体属性类。
还有 connString.IsNullOrEmpty() 这个是我封装的一个Stirng 的扩展类(StringExtensions)里的方法。这两个类在下面可以找到。
这个DataHelper类,必须基于 SQLDataAccess 和我自己定义的实体类的形式才可以实现。 这里大家只是借鉴下就好了.
yeqw.FrameWork; 我把 ModelDataAttribute StringExtensions 封装到里面了。
二:代码:
DataHelper:(这里写的不是太好,其中的分页只是调用一个分页存储过程。这个Helper里最大的一个问题,就是不支持事务,一直没考虑好怎么把事务封进来)
1 namespace yeqw.DataHelper 2 { 3 using System; 4 using System.Collections.Generic; 5 using System.Data; 6 using System.Data.SqlClient; 7 using System.Reflection; 8 using System.Runtime.InteropServices; 9 using System.Text.RegularExpressions; 10 using yeqw.FrameWork; 11 using yeqw.sql.common.DB; 12 13 public class DBHelper 14 { 15 public static int DbExecuteNonQuery(SqlCommand Command) 16 { 17 using (SQLDataAccess access = new SQLDataAccess()) 18 { 19 return access.ExecuteNonQuery(Command); 20 } 21 } 22 23 public static int DbExecuteNonQuery(SqlCommand Command, string connString) 24 { 25 using (SQLDataAccess access = new SQLDataAccess(connString)) 26 { 27 return access.ExecuteNonQuery(Command); 28 } 29 } 30 31 public static object DbExecuteScalar(SqlCommand Command) 32 { 33 SQLDataAccess access = new SQLDataAccess(); 34 return access.ExecuteScalar(Command); 35 } 36 37 public static DataTable ExecProc_sp_GetPage(string tbName, string colName, int coltype, string orderby, string collist, int pagesize, int page, string condition, out int pages, out int rsCount, out int curCount) 38 { 39 return ExecProc_sp_GetPage(tbName, colName, coltype, orderby, collist, pagesize, page, condition, out pages, out rsCount, out curCount, ""); 40 } 41 42 public static DataTable ExecProc_sp_GetPage(string tbName, string colName, int coltype, string orderby, string collist, int pagesize, int page, string condition, out int pages, out int rsCount, out int curCount, string connstring) 43 { 44 SQLDataAccess access = null; 45 DataTable table; 46 if (connstring.IsNullOrEmpty()) 47 { 48 access = new SQLDataAccess(); 49 } 50 else 51 { 52 access = new SQLDataAccess(connstring); 53 } 54 try 55 { 56 SqlCommand command = GetCommand(tbName, colName, coltype, orderby, collist, pagesize, page, condition); 57 DataSet ds = new DataSet(); 58 access.FillDataSet(command, ds); 59 pages = (int)command.Parameters["@pages"].Value; 60 rsCount = (int)command.Parameters["@rsCount"].Value; 61 curCount = (int)command.Parameters["@curCount"].Value; 62 table = ds.Tables[1]; 63 } 64 catch (Exception exception) 65 { 66 throw new Exception(exception.Message); 67 } 68 finally 69 { 70 access.Dispose(); 71 } 72 return table; 73 } 74 75 76 public static List<T> FillData<T>(SqlCommand Command) where T : class, new() 77 { 78 return FillData<T>(Command, string.Empty); 79 } 80 81 public static List<T> FillData<T>(SqlCommand Command, string connString) where T : class, new() 82 { 83 List<T> list = new List<T>(); 84 SQLDataAccess access = null; 85 if (connString.IsNullOrEmpty()) 86 { 87 access = new SQLDataAccess(); 88 } 89 else 90 { 91 access = new SQLDataAccess(connString); 92 } 93 try 94 { 95 SqlDataReader reader = access.ExecuteReader(Command); 96 while (reader.Read()) 97 { 98 T entity = Activator.CreateInstance<T>(); 99 list.Add(GetEntity<T>(reader, entity)); 100 } 101 if (!reader.IsClosed) 102 { 103 reader.Close(); 104 } 105 } 106 finally 107 { 108 access.Dispose(); 109 } 110 return list; 111 } 112 113 public static T FillObject<T>(SqlCommand Command) where T : class, new() 114 { 115 return FillObject<T>(Command, string.Empty); 116 } 117 118 public static T FillObject<T>(SqlCommand Command, string connString) where T : class, new() 119 { 120 SQLDataAccess access = null; 121 if (connString.IsNullOrEmpty()) 122 { 123 access = new SQLDataAccess(); 124 } 125 else 126 { 127 access = new SQLDataAccess(connString); 128 } 129 SqlDataReader reader = null; 130 try 131 { 132 reader = access.ExecuteReader(Command); 133 if (reader.Read()) 134 { 135 return GetEntity<T>(reader, Activator.CreateInstance<T>()); 136 } 137 } 138 finally 139 { 140 if (!reader.IsClosed) 141 { 142 reader.Close(); 143 } 144 access.Dispose(); 145 } 146 return default(T); 147 } 148 149 private static SqlCommand GetCommand(string tbName, string colName, int coltype, string orderby, string collist, int pagesize, int page, string condition) 150 { 151 string cmdText = "sp_GetPage"; 152 SqlCommand command = new SqlCommand(cmdText) 153 { 154 CommandTimeout = 0, 155 CommandType = CommandType.StoredProcedure 156 }; 157 command.Parameters.Add("@tbName", SqlDbType.VarChar, 100); 158 command.Parameters["@tbName"].Value = tbName; 159 command.Parameters.Add("@colName", SqlDbType.VarChar, 100); 160 command.Parameters["@colName"].Value = colName; 161 command.Parameters.Add("@coltype", SqlDbType.Int, 4); 162 command.Parameters["@coltype"].Value = coltype; 163 command.Parameters.Add("@orderby", SqlDbType.VarChar, 100); 164 command.Parameters["@orderby"].Value = orderby; 165 command.Parameters.Add("@collist", SqlDbType.VarChar, 800); 166 command.Parameters["@collist"].Value = collist; 167 command.Parameters.Add("@pagesize", SqlDbType.Int, 4); 168 command.Parameters["@pagesize"].Value = pagesize; 169 command.Parameters.Add("@page", SqlDbType.Int, 4); 170 command.Parameters["@page"].Value = page; 171 command.Parameters.Add("@condition", SqlDbType.VarChar, 0x7d0); 172 command.Parameters["@condition"].Value = condition; 173 command.Parameters.Add("@pages", SqlDbType.Int); 174 command.Parameters.Add("@rsCount", SqlDbType.Int); 175 command.Parameters.Add("@curCount", SqlDbType.Int); 176 command.Parameters["@pages"].Direction = ParameterDirection.Output; 177 command.Parameters["@rsCount"].Direction = ParameterDirection.Output; 178 command.Parameters["@curCount"].Direction = ParameterDirection.Output; 179 return command; 180 } 181 182 public static DataSet GetDataSet(SqlCommand Command) 183 { 184 SQLDataAccess access = new SQLDataAccess(); 185 DataSet ds = new DataSet(); 186 try 187 { 188 access.FillDataSet(Command, ds); 189 } 190 finally 191 { 192 access.Dispose(); 193 } 194 return ds; 195 } 196 197 public static DataTable GetDataTable(SqlCommand Command) 198 { 199 SQLDataAccess access = new SQLDataAccess(); 200 DataTable table = null; 201 try 202 { 203 table = new DataTable(); 204 table = access.FillDataSet(Command); 205 } 206 finally 207 { 208 access.Dispose(); 209 } 210 return table; 211 } 212 213 public static DataTable GetDataTable(SqlCommand Command, string connString) 214 { 215 SQLDataAccess access = new SQLDataAccess(connString); 216 DataTable table = null; 217 try 218 { 219 table = new DataTable(); 220 table = access.FillDataSet(Command); 221 } 222 finally 223 { 224 access.Dispose(); 225 } 226 return table; 227 } 228 229 public static DataTable GetDataTableSchema(string TableName) 230 { 231 string cmdText = string.Format("select * from {0} where 1=2", TableName); 232 SQLDataAccess access = new SQLDataAccess(); 233 DataTable table = null; 234 try 235 { 236 SqlCommand command = new SqlCommand(cmdText); 237 table = new DataTable(); 238 table = access.FillDataSet(command); 239 } 240 finally 241 { 242 access.Dispose(); 243 } 244 return table; 245 } 246 247 public static DateTime GetDate() 248 { 249 DateTime now = DateTime.Now; 250 string sql = "SELECT getdate()"; 251 using (SQLDataAccess access = new SQLDataAccess()) 252 { 253 SqlDataReader reader = access.ExecuteReader(sql); 254 if (reader.Read()) 255 { 256 now = (DateTime)reader[0]; 257 } 258 if (!reader.IsClosed) 259 { 260 reader.Close(); 261 } 262 } 263 return now; 264 } 265 266 public static T GetEntity<T>(IDataReader reader, T entity) 267 { 268 PropertyInfo[] properties = entity.GetType().GetProperties(); 269 foreach (PropertyInfo info in properties) 270 { 271 object[] customAttributes = info.GetCustomAttributes(true); 272 if (customAttributes.Length != 0) 273 { 274 ModelDataAttribute attribute = (ModelDataAttribute)customAttributes[0]; 275 if (!(reader[attribute.SQLFieldName] is DBNull)) 276 { 277 info.SetValue(entity, reader[attribute.SQLFieldName], null); 278 } 279 } 280 } 281 return entity; 282 } 283 284 public static SqlParameter GetSqlParamseter(string parameterName, object Value) 285 { 286 return GetSqlParamseter(parameterName, SqlDbType.NVarChar, 0, Value); 287 } 288 289 public static SqlParameter GetSqlParamseter(string parameterName, SqlDbType dbType, int size, ParameterDirection Direction) 290 { 291 SqlParameter parameter = new SqlParameter 292 { 293 ParameterName = parameterName, 294 SqlDbType = dbType, 295 Direction = Direction 296 }; 297 if (size != 0) 298 { 299 parameter.Size = size; 300 } 301 return parameter; 302 } 303 304 public static SqlParameter GetSqlParamseter(string parameterName, SqlDbType dbType, int size, object Value) 305 { 306 SqlParameter parameter = new SqlParameter 307 { 308 ParameterName = parameterName, 309 SqlDbType = dbType 310 }; 311 if (((Value == null) || string.IsNullOrEmpty(Value.ToString())) || ((parameter.SqlDbType == SqlDbType.DateTime) && (DateTime.MinValue == Convert.ToDateTime(Value)))) 312 { 313 parameter.Value = DBNull.Value; 314 } 315 else 316 { 317 parameter.Value = Value; 318 } 319 if (size != 0) 320 { 321 parameter.Size = size; 322 } 323 return parameter; 324 } 325 326 public static void SetDBCommandParameters(SqlCommand Comm, object entity) 327 { 328 Comm.Parameters.RemoveAt(0); 329 if (Comm.Parameters.Count > 0) 330 { 331 PropertyInfo[] properties = entity.GetType().GetProperties(); 332 foreach (SqlParameter parameter in Comm.Parameters) 333 { 334 bool flag = false; 335 foreach (PropertyInfo info in properties) 336 { 337 object[] customAttributes = info.GetCustomAttributes(typeof(ModelDataAttribute), true); 338 if (customAttributes.Length != 0) 339 { 340 ModelDataAttribute attribute = (ModelDataAttribute)customAttributes[0]; 341 if (string.Equals(attribute.SQLFieldName, parameter.ParameterName.Replace("@", ""), StringComparison.CurrentCultureIgnoreCase)) 342 { 343 object obj2 = info.GetValue(entity, null); 344 parameter.SqlDbType = attribute.SQLDbType; 345 parameter.Size = attribute.SQLSize; 346 parameter.Direction = attribute.SQLParameterDirection; 347 if (obj2 != null) 348 { 349 parameter.Value = obj2; 350 } 351 else 352 { 353 parameter.Value = DBNull.Value; 354 } 355 flag = true; 356 break; 357 } 358 } 359 } 360 if (!flag) 361 { 362 throw new Exception("没有找到参数值!"); 363 } 364 } 365 } 366 } 367 368 public static void SetSqlParameters(SqlCommand comm, object entity) 369 { 370 comm.Parameters.Clear(); 371 string commandText = comm.CommandText; 372 PropertyInfo[] properties = entity.GetType().GetProperties(); 373 foreach (PropertyInfo info in properties) 374 { 375 object[] customAttributes = info.GetCustomAttributes(typeof(ModelDataAttribute), true); 376 if (customAttributes.Length >= 1) 377 { 378 ModelDataAttribute attribute = customAttributes[0] as ModelDataAttribute; 379 if (Regex.IsMatch(commandText, "@" + attribute.SQLFieldName + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)) 380 { 381 object obj2 = info.GetValue(entity, null); 382 SqlParameter parameter = comm.CreateParameter(); 383 parameter.SqlDbType = attribute.SQLDbType; 384 parameter.ParameterName = "@" + attribute.SQLFieldName; 385 parameter.Size = attribute.SQLSize; 386 parameter.Direction = attribute.SQLParameterDirection; 387 parameter.Value = (obj2 == null) ? DBNull.Value : obj2; 388 comm.Parameters.Add(parameter); 389 } 390 } 391 } 392 } 393 394 public static int UpdateDataTable(string TableName, DataTable dataTable) 395 { 396 SQLDataAccess access = new SQLDataAccess(); 397 SqlCommand selectCommand = new SqlCommand(string.Format("select * from {0} where 1=2", TableName)); 398 return access.UpdateDataTable(selectCommand, dataTable); 399 } 400 } 401 }
实体类:
1 using System; 2 using System.Data; 3 using yeqw.FrameWork; 4 using System.ComponentModel; 5 6 namespace yeqw.bm.Model 7 { 8 /// <summary> 9 /// Summary description for adminmenuinfo 10 /// </summary> 11 [Serializable] 12 public class AdminMenuInfo 13 { 14 /// <summary> 15 /// 流水号 16 /// </summary> 17 [ModelData("ID", SqlDbType.Int, 4, ParameterDirection.InputOutput)] 18 public int ID 19 { 20 set; 21 get; 22 } 23 /// <summary> 24 /// 用户流水号 25 /// </summary> 26 [ModelData("AdminID", SqlDbType.Int, 4)] 27 public int AdminID 28 { 29 set; 30 get; 31 } 32 /// <summary> 33 /// 菜单权限流水号 34 /// </summary> 35 [ModelData("MenuAuthorityID", SqlDbType.Int, 4)] 36 public int MenuAuthorityID 37 { 38 set; 39 get; 40 } 41 42 /// <summary> 43 /// 操作员流水号 44 /// </summary> 45 [ModelData("OperAdminID", SqlDbType.Int, 4)] 46 public int OperAdminID 47 { 48 set; 49 get; 50 } 51 52 /// <summary> 53 /// 操作时间 54 /// </summary> 55 [ModelData("OperTime", SqlDbType.DateTime, 8)] 56 public DateTime OperTime 57 { 58 set; 59 get; 60 } 61 62 /// <summary> 63 /// 角色菜单权限状态(0 冻结 1 正常,2关闭) 64 /// </summary> 65 [ModelData("Status", SqlDbType.TinyInt, 1)] 66 public byte Status 67 { 68 set; 69 get; 70 } 71 /// <summary> 72 /// 入库时间 73 /// </summary> 74 [ModelData("InsertTime", SqlDbType.DateTime, 8)] 75 public DateTime InsertTime 76 { 77 set; 78 get; 79 } 80 } 81 }
StringExtensions 类:
namespace yeqw.FrameWork { using System; using System.Runtime.CompilerServices; using System.Text; using System.Text.RegularExpressions; using System.Web.Script.Serialization; public static class StringExtensions { public static bool CheckSqlCondition(this string input) { return true; } public static object Deserialize(this string base64Str) { return SerializeHelper.Deserialize(base64Str); } public static string FormatExtension(this string input, params object[] args) { return string.Format(input, args); } public static bool IsALLInteger(this string input) { return Regex.IsMatch(input, @"^([-]\d+)|\d+$"); } public static bool IsAZaz09(this string input) { return Regex.IsMatch(input, "^[A-Za-z0-9]+$"); } public static bool IsByte(this string input) { byte num; return byte.TryParse(input, out num); } public static bool IsChinese(this string input) { return Regex.IsMatch(input, "^([一-龥]|[︰-ᅠ])+$"); } public static bool IsDecimal(this string input) { decimal num; return decimal.TryParse(input, out num); } public static bool IsEmail(this string input) { return Regex.IsMatch(input, @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); } public static bool IsEnglish(this string input) { return Regex.IsMatch(input, "^[a-zA-Z]+$"); } public static bool IsIdCard(this string input) { string str; string str2; string str3 = "10x98765432"; int[] numArray = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; string[] strArray = new string[] { "", "", "", "", "", "", "", "", "", "", "", "北京", "天津", "河北", "山西", "内蒙古", "", "", "", "", "", "辽宁", "吉林", "黑龙江", "", "", "", "", "", "", "", "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", "", "", "", "河南", "湖北", "湖南", "广东", "广西", "海南", "", "", "", "重庆", "四川", "贵州", "云南", "西藏", "", "", "", "", "", "", "陕西", "甘肃", "青海", "宁夏", "新疆", "", "", "", "", "", "台湾", "", "", "", "", "", "", "", "", "", "香港", "澳门", "", "", "", "", "", "", "", "", "国外" }; Match match = Regex.Match(input, @"^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[xX\d])))$"); if (match.Length == 0) { return false; } if ((int.Parse(match.Result("$1")) >= strArray.Length) || (strArray[int.Parse(match.Result("$1"))] == "")) { return false; } if (match.Result("$2").Length == 12) { str2 = input.Substring(0, 0x11); str = string.Format("{0}-{1}-{2}", match.Result("$9"), match.Result("$10"), match.Result("$11")); } else { str2 = input.Substring(0, 6) + "19" + input.Substring(6); str = string.Format("19{0}-{1}-{2}", match.Result("$4"), match.Result("$5"), match.Result("$6")); } try { DateTime.Parse(str); } catch (Exception) { return false; } int num = 0; for (int i = 0; i <= 0x10; i++) { num += int.Parse(str2.Substring(i, 1)) * numArray[i]; } str2 = str2 + str3.Substring(num % 11, 1); return ((input.Length == 15) || ((input.Length == 0x12) && (input == str2))); } public static bool IsInteger(this string input) { return Regex.IsMatch(input, "^[0-9]+$"); } public static bool IsIP(this string input) { return Regex.IsMatch(input, @"^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$"); } public static bool IsNullOrEmpty(this string input) { return string.IsNullOrEmpty(input); } public static bool IsPhone(this string input) { return Regex.IsMatch(input, @"^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$"); } public static bool IsUrl(this string input) { return Regex.IsMatch(input, "^http:\\/\\/[A-Za-z0-9\\./=\\?%\\-&_~`@[\\]\\':+!]+([^<>\"])+$"); } public static string NoHTML(this string Htmlstring) { Htmlstring = Regex.Replace(Htmlstring, "<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "<(.[^>]*)>", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "-->", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "<!--.*", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(quot|#34);", "\"", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(amp|#38);", "&", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(lt|#60);", "<", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(gt|#62);", ">", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(nbsp|#160);", " ", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(iexcl|#161);", "\x00a1", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(cent|#162);", "\x00a2", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(pound|#163);", "\x00a3", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "&(copy|#169);", "\x00a9", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase); Htmlstring = Htmlstring.Replace("<", ""); Htmlstring = Htmlstring.Replace(">", ""); Htmlstring = Htmlstring.Replace("\r\n", ""); Htmlstring = Htmlstring.Replace("…", ""); Htmlstring = Htmlstring.Replace("—", ""); Htmlstring = Htmlstring.Replace("”", ""); Htmlstring = Htmlstring.Replace("“", ""); return Htmlstring; } public static string SubStringCN(this string stringToSub, int length, string flage) { if (stringToSub.IsNullOrEmpty()) { return string.Empty; } Regex regex = new Regex("[一-龥]+", RegexOptions.Compiled); char[] chArray = stringToSub.ToCharArray(); int byteCount = Encoding.Default.GetByteCount(stringToSub); StringBuilder builder = new StringBuilder(); string str = string.Empty; int num2 = 0; for (int i = 0; i < byteCount; i++) { if (i >= chArray.Length) { return str; } if (regex.IsMatch(chArray[i].ToString())) { num2 += 2; } else { num2++; } builder.Append(chArray[i]); if (num2 > length) { return (builder.ToString(0, builder.ToString().Length - 1) + flage); } str = builder.ToString(); } return str; } public static int ToByte(this string input) { return byte.Parse(input); } public static decimal ToDecimal(this string input) { return decimal.Parse(input); } public static long ToInt64(this string input) { return long.Parse(input); } public static int ToInteger(this string input) { return int.Parse(input); } public static T ToObject<T>(this string input) where T: class, new() { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Deserialize<T>(input); } public static bool Validate(this string input, string parrtern) { return Regex.IsMatch(input, parrtern); } } }
ModelDataAttribute 类:
namespace yeqw.FrameWork { using System; using System.Data; using System.Runtime.CompilerServices; [AttributeUsage(AttributeTargets.Property, Inherited=true)] public class ModelDataAttribute : Attribute { public ModelDataAttribute(string sqlFieldName, SqlDbType sqlParameterType) : this(sqlFieldName, sqlParameterType, 0) { } public ModelDataAttribute(string sqlFieldName, SqlDbType sqlParameterType, int sqlparametersize) : this(sqlFieldName, sqlParameterType, sqlparametersize, ParameterDirection.Input) { } public ModelDataAttribute(string sqlFieldName, SqlDbType sqlParameterType, int sqlparametersize, ParameterDirection sqlParameterDirection) { this.SQLFieldName = sqlFieldName; this.SQLDbType = sqlParameterType; this.SQLSize = sqlparametersize; this.SQLParameterDirection = sqlParameterDirection; } public void Validate(object value) { if (!this.CanNull && string.IsNullOrEmpty(value.ToString())) { throw new ArgumentException(this.Message); } } public bool CanNull { get; set; } public string Message { get; set; } public SqlDbType SQLDbType { get; set; } public string SQLFieldName { get; set; } public ParameterDirection SQLParameterDirection { get; set; } public int SQLSize { get; set; } public enum EnumValidateType : byte { IsMaxLength = 2, IsNull = 0, IsNumber = 1 } } }
三:总结:
DataHepler 和SQLDataAccess 这两个类都是比较简单的一个类库设计。做任何项目适合自己的才是最好的。用CodeSmith 这样的工具都能生成很好的只要的类库。
但我希望大家尤其是刚入门的童鞋要明白,基础才是一切的根本。知其然更要致其所以然。在编程的路上遇到不同的级别的项目,尤其现在都说的大数据时代。任何的类库
都是有自己的局限性的。只有因地制宜,根据实际需要做出自己最合理的选择才是王道。不仅要举一翻三,更要一通百通。类库是死的人是活的,不管是什么样的技术,明白
基础了,才是最重要的。(自己的一点感慨,瞎喷的。呵呵)
=================================================================
HI,如果童鞋们觉得本人此博文对你有用,请不要吝啬自己的鼠标,给此博文一个“推荐”吧。鼓励,鼓励。哈哈
本博文系博主原创,版权归博主所有,如需转载,请注明转载地址。
当前博客原始地址:yeqw1985.cnblogs.com
=================================================================