c#反射--记录一种sql组装方式
2019-06-06 11:20
225 查看
[code] Type type = model.GetType(); //获取类型 System.Reflection.PropertyInfo propertyInfo = type.GetProperty(textType); decimal value = (decimal)propertyInfo.GetValue(model, null);
补充一下反射的类型,定义了一个公共方法
[code] public static object ActionHandler(string fullName, string assemblyName, object[] prams, string method) { string path = fullName + "," + assemblyName;//命名空间.类型名,程序集 Type p = Type.GetType(path,false,true);//加载类型,是否抛出异常,是否区分字符串大小写 try { object obj = Activator.CreateInstance(p, prams);//根据类型创建实例 //反射方法,不区分大小写 MethodInfo methods = p.GetMethod(method, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance); //判断当前对象是否存在指定的方法 obj指实例化对象,null指IsMoveing()的参数 // (bool)menthod.Invoke(obj,null) // method.Invoke( obj, arrParam ); //obj为调用方法所属的类型实例,如果调用的为静态方法,可设置为null;arrParam为方法参数数组 return methods.Invoke(obj, null); } catch(Exception e) { var s = e.Message; return null; } }
第一步new 一个对象用来存储值
[code]/// <summary> /// 生成参数 /// </summary> /// <param name="name">字段名(列名)</param> /// <param name="val">参数值(若算法是in,多个参数值传入逗号隔开的字符串 "val1,val2,val3")</param> /// <param name="weather">是否拼接,默认为true</param> /// <param name="cal">算法(=、>=等)注:like算法如包含多个字段,参数名也用逗号隔开 "a1,a2,a3"</param> /// <param name="blur">1表示前面模糊,2表示后模糊,3表示前后模糊,其余的数字表示精确查询(默认项)</param> /// <returns></returns> public static NzSql MakeParam(string name,object val,bool weather=true,string cal="=",int blur=0) { NzSql param = new NzSql { ParamValue = val, ParamName = name, Blur = blur, ParamCal = cal, ParamBool = weather }; if (val != null) param.ParamType = val.GetType(); return param; }
然后循环出对象值,重点是下面根据对象类型来判断属性的值,因为平时用的少,记录一下
[code] private static string GetStrByType(NzSqlConditionInfo info) { switch (info.ParamType.FullName) { case "System.DateTime": return GetDateByCal(info); case "System.String": return $" and { info.ParamName}{ info.ParamCal}'{Utils.Filter((string) info.ParamValue)}'"; default: return $" and { info.ParamName}{ info.ParamCal}{Utils.ObjectToStr(info.ParamValue)}"; } }
时间类型的一种sql的简单拼接方法
[code] private static string GetDateByCal(NzSqlConditionInfo info) { DateTime dt = Convert.ToDateTime(info.ParamValue); string dtstr = dt.ToString("yyyy/MM/dd"); switch (info.ParamCal) { case ">=": return $" and { info.ParamName}{ info.ParamCal}'{dtstr} 0:00:00'"; case "<=": return $" and { info.ParamName}{ info.ParamCal}'{dtstr} 23:59:59'"; case "<": return $" and { info.ParamName}{ info.ParamCal}'{dtstr} 23:59:59'"; case "month": return $" and {info.ParamName} between \'{dt}\' and \'{dt.AddMonths(1)}\' "; default: return $" and {info.ParamName} between \'{dt}\'and \'{dt.AddDays(1)}\' "; } }
相关文章推荐
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- c# cs方式操作数据库 非使用sql连接字符串直接连接数据库
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- SQL 在查询中插入行号--自定义分页的另外一种实现方式
- C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号
- C#获取SQL 2005表中的记录总数!...
- NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- SparkSQL学习记录(SparkSQL 两种Schema创建方式)
- 抽象工厂模式实现不同数据库(ACCess、SQL)实现用户和部门操作,用反射的方式切换...
- SQL 表中记录查询排序随笔(sql server中order by使用方式小总结)
- LINQ - 为C#开发的一种类似于SQL的语言
- C#获取SQL 2005表中的记录总数!...
- 记录用反射方式操作属性或变量
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- C#不同数据库连接方式对应的Sql语句的构造
- SQL 在查询中插入行号--自定义分页的另外一种实现方式
- C# 用SqlBulkCopy 批量插入oracle数据 遇到了 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效