zoukankan      html  css  js  c++  java
  • C#使用反射根据实体生成sql语句(添加和批量添加)

      最近碰上这个一个需求,需要写一个接口,将穿进来的参数,存储到数据库里,但是存到哪个库,哪个表,不确定,需要根据参数去判断,但数据结构是固定的,因为表名不是固定的,所以这就很麻烦了,不能用EF直接去add或者是addRange了。需要自己去拼sql语句。

      但是本人比较懒,懒得去写sql语句,所以就写了一个自动生成Insert语句的通用方法,代码如下

    /// <summary>
        /// 对象拼接sql语句
        /// </summary>
        public class SqlBuilderHelper
        {
            /// <summary>
            /// Insert SQL语句
            /// </summary>
            /// <param name="obj">要转换的对象,不可空</param>
            /// <param name="tableName">要添加的表明,不可空</param>
            /// <returns>
            ////// sql语句
            /// </returns>
            public static string InsertSql<T>(T t, string tableName) where T : class
            {
                if (t == null || string.IsNullOrEmpty(tableName))
                {
                    return string.Empty;
                }
                string columns = GetColmons(t);
                if (string.IsNullOrEmpty(columns))
                {
                    return string.Empty;
                }
                string values = GetValues(t);
                if (string.IsNullOrEmpty(values))
                {
                    return string.Empty;
                }
                StringBuilder sql = new StringBuilder();
                sql.Append("Insert into " + tableName);
                sql.Append("(" + columns + ")");
                sql.Append(" values(" + values + ")");
                return sql.ToString();
            }
    
            /// <summary>
            /// BulkInsert SQL语句(批量添加)
            /// </summary>
            /// <typeparam name="T">类型</typeparam>
            /// <param name="objs">要转换的对象集合,不可空</param>
            /// <param name="tableName">>要添加的表明,不可空</param>
            /// <returns>
            ////// sql语句
            /// </returns>
            public static string BulkInsertSql<T>(List<T> objs, string tableName) where T : class
            {
                if (objs == null || objs.Count == 0 || string.IsNullOrEmpty(tableName))
                {
                    return string.Empty;
                }
                string columns = GetColmons(objs[0]);
                if (string.IsNullOrEmpty(columns))
                {
                    return string.Empty;
                }
                string values = string.Join(",", objs.Select(p => string.Format("({0})", GetValues(p))).ToArray());
                StringBuilder sql = new StringBuilder();
                sql.Append("Insert into " + tableName);
                sql.Append("(" + columns + ")");
                sql.Append(" values " + values + "");
                return sql.ToString();
            }
    
            /// <summary>
            /// 获得类型的列名
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            private static string GetColmons<T>(T obj)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                return string.Join(",", obj.GetType().GetProperties().Select(p => p.Name).ToList());
            }
    
            /// <summary>
            /// 获得值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            private static string GetValues<T>(T obj)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                return string.Join(",", obj.GetType().GetProperties().Select(p => string.Format("'{0}'", p.GetValue(obj))).ToArray());
            }
        }

       修改也写好了,C#根据反射生成sql语句(Update语句)

      这个可以直接使用,有需要的朋友可以直接复制走。

      有什么问题欢迎随时交流。

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/Yuuuuu/p/8688237.html
Copyright © 2011-2022 走看看