• Dapper 批量插入


    环境 Mssql

    自带的Dapper.Net 批量插入 是一条条循环插入

    这里改成了单条 Ps:主要此方法要控制字符串长度哦,每个数据库对单条sql字符长度的限制是不一样的。

            /// <summary>
            ///     批量插入
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="entities"></param>
            /// <param name="exclude">排除的字段</param>
            public int BatchInsert<T>(List<T> entities, string[] exclude = null)
            {
                if (exclude == null || exclude.Length <= 0)
                    exclude = new[] {"Tid"};
    
                for (var i = 0; i < exclude.Length; i++)
                {
                    exclude[i] = exclude[i].ToLower();
                }
    
                if (entities != null && entities.Count > 0)
                {
                    var tbname = typeof(T).Name.TrimEnd("Entity".ToCharArray());
                    var colms = new List<string>();
                    var ps = entities.First().GetType().GetProperties().Where(p => !exclude.Contains(p.Name.ToLower()))
                        .ToList();
                    foreach (var p in ps)
                    {
                        colms.Add($"[{p.Name}]");
                    }
    
                    var paramList = new DynamicParameters();
                    var paramsNames = new List<string>();
    
    
                    var s = 0;
                    var n = "a";
                    foreach (var item in entities)
                    {
                        var toNames = new List<string>();
    
                        foreach (var p in ps)
                        {
                            var pname = $"@{n}{s}";
                            var pvalue = p.GetValue(item, null);
    
                            toNames.Add(pname);
                            paramList.Add(pname, pvalue);
                            s++;
                        }
    
                        paramsNames.Add($"({string.Join(",", toNames)})");
                    }
    
                    var sql =
                        $"INSERT INTO TB_{tbname} ({string.Join(",", colms)}) VALUES {string.Join(",", paramsNames)}";
                    return Connection.Execute(sql, paramList, _tran);
                }
    
                throw new Exception("传入参数先");
            }
  • 相关阅读:
    poj 1700 Crossing River 过河问题。贪心
    Alice's Print Service
    POI 2000 ------Stripes
    Uva 1378
    hdu 3068 最长回文
    bnu Game 博弈。
    链栈的C语言实现
    链栈的C语言实现
    顺序栈C语言实现
    顺序栈C语言实现
  • 原文地址:https://www.cnblogs.com/huangyoum/p/8978705.html
Copyright © 2020-2023  润新知