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都不会绑数据源,还能说什么呢?