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("傳入參數先");
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM