【网上代码以讹传讹系列】

阅读: 评论:0

【网上代码以讹传讹系列】

【网上代码以讹传讹系列】

1.windows下mysql的表名大小写区分 :

一搜差不多都是

打开my.ini

[mysqld]
lower_case_table_names=0

但是这么已设置,mysql服务都启动不起来。mysql版本5.7.19。

但设置成lower_case_table_names=2就没问题了,表名区分了大小写。

lower_case_table_names=0应该是Linux下的设置方式吧?具体我也没时间去实验了。

2.话说离开百度,某些人就不会写代码了。也难怪,现在要求开发速度高,哪还有那么多人去潜心学习基础知识。但很多网上的代码是有问题的,也许各位也都在实际测试中发现了,我就举个例子。

就拿C#的DataTable对象转List<>集合的代码,网上一搜千篇一律,注释都没变:

public static List<T> ToList<T>(this DataTable dt) where T : class, new()  {  //创建一个属性的列表    List<PropertyInfo> prlist = new List<PropertyInfo>();  //获取TResult的类型实例  反射的入口    
  Type t = typeof(T);  //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表     Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });  //创建返回的集合    
  List<T> oblist = new List<T>();  foreach (DataRow row in dt.Rows)  {  //创建TResult的实例    T ob = new T();  //找到对应的数据  并赋值    prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });  //放入到返回的集合中.    
            oblist.Add(ob);  }  return oblist;  }

甚至更简单:

public static IList<T> ConvertToModel(DataTable dt){IList<T> ts = new List<T>();// 定义集合Type type = typeof(T); // 获得此模型的类型string tempName = "";foreach (DataRow dr in dt.Rows){T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性foreach (PropertyInfo pi in propertys){tempName = pi.Name;if (dt.Columns.Contains(tempName)){if (!pi.CanWrite) continue;object value = dr[tempName];if (value != DBNull.Value)pi.SetValue(t, value, null);}}ts.Add(t);}return ts;}

他们最大的问题,就是忽略了datetime类型的处理。因为windows操作系统日期格式设置的差异,导致日期时间格式的强制转换会有问题,有时碰巧会转换成功,但有时转换结果就是0001-00-00,

这是第一段代码稍作修改后的,处理比较简单,仅供参考:

                prlist.ForEach(p => {if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null);//如果是日期时间类型,不能这么草率的赋值!网络上的代码漏洞很多! //日期时间类型的处理 try{if (p.PropertyType == typeof(DateTime) || p.PropertyType == typeof(DateTime?)){DateTime _dt;try{_dt = DateTime.FromOADate(double.Parse(row[p.Name].ToString()));}catch{_dt = Convert.ToDateTime(row[p.Name].ToString());}p.SetValue(ob, _dt, null);}}catch { }});

 再啰嗦一句,什么年代了,为毛还要用DataTable这种对象?弱类型的集合现在很多场合下用起来都很费劲,少不了各种判断和转换。某些喜欢用dataTable的人,不是因为DataTable好用,而是他不会用别的,见过一个大哥,不把集合转成dataTable都不会绑数据源,还能说什么呢?

转载于:.html

本文发布于:2024-01-29 11:16:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170649819514889.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:以讹传讹   代码   系列   网上
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23