环境 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("传入参数先"); }