• 反射实体类拼接SQL语句


    实体类基类:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Reflection;
      5 using System.Text;
      6 using System.Threading.Tasks;
      7 
      8 namespace Common
      9 {
     10     /// <summary>
     11     /// 实体类基类
     12     /// </summary>
     13     [Serializable]
     14     public abstract class EntityBase
     15     {
     16         /// <summary>
     17         /// 获取主键
     18         /// </summary>
     19         /// <returns></returns>
     20         public abstract string GetPrimaryKey();
     21         /// <summary>
     22         /// 获取INSERT语句
     23         /// </summary>
     24         /// <returns></returns>
     25         public string GetInsertSql()
     26         {
     27             try
     28             {
     29                 Type t = this.GetType();
     30                 string tableName = t.Name,pKey=this.GetPrimaryKey(),fields=string.Empty,values=string.Empty,temp=null;
     31                 foreach (PropertyInfo pi in t.GetProperties())
     32                 {
     33                     if (!pi.CanWrite) continue;
     34                     if (pi.Name.Equals(pKey))
     35                     {
     36                         continue;
     37                     }
     38                     temp = GetByTypeStr(pi);
     39                     fields += pi.Name + ",";
     40                     values += temp + ",";
     41                 }
     42                 return string.Format("Insert into {0}({1}) Values({2})", tableName, fields.TrimEnd(','), values.TrimEnd(','));
     43             }
     44             catch
     45             {
     46                 throw;
     47             }
     48         }
     49         /// <summary>
     50         /// 获取UPDATE语句
     51         /// </summary>
     52         /// <returns></returns>
     53         public string GetUpdateSql()
     54         {
     55             try
     56             {
     57                 Type t = this.GetType();
     58                 PropertyInfo[] pInfos = t.GetProperties();
     59                 string tableName = t.Name, pKey = this.GetPrimaryKey(), str_fields=string.Empty;
     60                 int keyIndex = -1;
     61                 for (int i = 0; i < pInfos.Length; i++)
     62                 {
     63                     if (pInfos[i].Name.Equals(this.GetPrimaryKey()))
     64                     {
     65                         keyIndex = i;
     66                         continue;
     67                     }
     68                     str_fields += pInfos[i].Name + " = " + GetByTypeStr(pInfos[i]) + ",";
     69                 }
     70                 return string.Format("Update {0} Set {1} Where {2} = {3}", tableName, str_fields.TrimEnd(','),this.GetPrimaryKey(), GetByTypeStr(pInfos[keyIndex]));
     71             }
     72             catch
     73             {
     74                 throw;
     75             }
     76         }
     77         /// <summary>
     78         /// 根据数据类型反射字段值
     79         /// </summary>
     80         /// <param name="pInfo">公共属性</param>
     81         /// <returns></returns>
     82         private string GetByTypeStr(PropertyInfo pInfo)
     83         {
     84             try
     85             {
     86                 string result_str = string.Empty;
     87                 Type t = pInfo.PropertyType;
     88                 object obj = pInfo.GetValue(this, null);
     89                 bool valueNull = StringUtil.isNullOrBlank(obj);
     90                 if (t == typeof(string))
     91                 {
     92                     result_str = valueNull ? "null" : "'" + obj.ToString().Replace("--","") + "'";
     93                 }
     94                 else if (t == typeof(System.Decimal) || t == typeof(System.Int16) || t == typeof(System.Int32) || t == typeof(System.Int64))
     95                 {
     96                     result_str = t.Name == "Nullable`1"&& valueNull ? "null" : obj.ToString();
     97                     //if ()
     98                     //{
     99 
    100                     //}
    101                     //else
    102                     //{
    103                     //    result_str = valueNull ? "0" : obj.ToString();
    104                     //}                    
    105                 }
    106                 else if(t==typeof(DateTime)||t.Name== "Nullable`1")
    107                 {
    108                     if (valueNull||DateTime.MinValue.Equals(obj)|| t.Name == "Nullable`1")
    109                     {
    110                         result_str = "null";
    111                     }
    112                     else
    113                     {
    114                         result_str = "'"+obj.ToString().Replace("", "-").Replace("", "-").Replace("", "")+"'";
    115                     }
    116                 }
    117                 return result_str;
    118             }
    119             catch
    120             {
    121                 throw;
    122             }
    123         }
    124     }
    125 }

    实体类:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using Common;
     7 
     8 namespace Model
     9 {
    10     public class MainModel:EntityBase
    11     {
    12         public decimal id { get; set; }
    13         public string title { get; set; }
    14         public string contents { get; set; }
    15         public string type { get; set; }
    16         public DateTime? date { get; set; }
    17         public string people { get; set; }
    18         public string picurl { get; set; }
    19         /// <summary>
    20         /// 设置主键
    21         /// </summary>
    22         /// <returns></returns>
    23         public override string GetPrimaryKey()
    24         {
    25             return "id";
    26         }
    27     }
    28 }

    调用:

    1             Model.MainModel model = new Model.MainModel();
    2             model.title = context.Request.Form["txtTitle"];
    3             model.people = context.Request.Form["txtName"];
    4             model.contents = context.Request.Form["txtContent"];
    5             string resSql = model.GetInsertSql();
  • 相关阅读:
    cocos2dx的MotionStreak.cpp解析(-)
    gcc/g++基本命令简介
    C++编译器与链接器工作原理
    简单介绍 ARC 以及 ARC 实现的原理
    求两个链表表示的数的和
    对象内存结构中的 isa 指针是用来做什么的?
    按层遍历二叉树的节点
    一个 Objective-C 对象的内存结构是怎样的?
    创建一个可以被取消执行的 block
    TCP&UDP
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/11154597.html
Copyright © 2020-2023  润新知