MySql 批量提交方法

        #region MySql批量提交

        /// <summary>
        /// MySql批量提交
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="TbName">表名</param>
        /// <param name="PrintKey">如果主键不是自增长ID,则可以输入空字符串</param>
        /// <param name="lstData">需要插入表格内容</param>
        /// <returns></returns>
        public int SqlBulkToMySQl<T>(string TbName, string PrintKey, List<T> lstData)
        {

            int RtnExe = 0;

            string Sql = string.Empty;
            try
            {

                List<T> lstDtSel = new List<T>();

                foreach (var item in lstData)
                {
                    lstDtSel.Add(item);
                    if (lstDtSel.Count > 1500)
                    {
                        Sql = MySqlEceSql<T>(TbName, PrintKey, lstData);
                        if (Sql.Length > 0)
                        {
                            int Add= _db.Execute(Sql);
                            RtnExe = RtnExe + Add;

                            _log.Error($"表名:{TbName}新增条数:{Add}");
                            lstDtSel = new List<T>();
                            Sql = string.Empty;
                        }
                    }

                }


                if (lstDtSel.Count > 0)
                {
                    Sql = DataConvert.MySqlEceSql<T>(TbName, PrintKey, lstData);
                    int Add = _db.Execute(Sql);
                    RtnExe = RtnExe + Add; 
                    _log.Error($"表名:{TbName}新增条数:{Add}");
                    lstDtSel = new List<T>();
                    Sql = string.Empty;
                }
            }
            catch (Exception)
            {

                throw;
            }

            return RtnExe;
        }




        /// <summary>
        /// 批量生成可以执行的MySql语句
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="TbName"></param>
        /// <param name="PrintKey"></param>
        /// <param name="lstData"></param>
        /// <returns></returns>
        public static string MySqlEceSql<T>(string TbName, string PrintKey, List<T> lstData)
        {

            string Sql = string.Empty;
            try
            {

                if (lstData.Count < 1) return Sql;
                T s = lstData[0];
                PropertyInfo[] pps = GetPropertyInfos(s.GetType());
                Sql = Sql + string.Format($" INSERT INTO {TbName}  (  ");

                //剔除主键
                List<PropertyInfo> lst = new List<PropertyInfo>();
                foreach (var item in pps)
                {
                    if (item.Name.ToUpper().Equals(PrintKey.ToUpper()))
                    {
                        continue;
                    }
                    else
                    {
                        lst.Add(item);
                    }
                }

                foreach (var item in lst)
                {
                    Sql = Sql + string.Format($" {item.Name},");
                }
                Sql = Sql.Substring(0, Sql.Length - 1);
                Sql = Sql + string.Format($"  ) values ");




                foreach (var item in lstData)
                {
                    Sql = Sql + string.Format($" (  ");
                    foreach (var itemP in lst)
                    {


                        var value = item.GetType().GetProperty(itemP.Name).GetValue(item, null);

                        if (itemP.PropertyType.FullName.Contains("System.DateTime"))
                        {
                            DateTime.TryParse(value.ToString(), out  DateTime ODateTime);
                            if (ODateTime==null|| ODateTime.Year<2000)
                            {
                                value = null;
                            }
                            else
                            {
                                value = ODateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
                            }

                           

                        }

                        Sql = Sql + ($" '{value}',");
                    }
                    Sql = Sql.Substring(0, Sql.Length - 1);
                    Sql = Sql + string.Format($"  ) ,");

                }


                Sql = Sql.Substring(0, Sql.Length - 1);


            }
            catch (Exception)
            {

            }

            return Sql;
        }
        public static PropertyInfo[] GetPropertyInfos(Type type)
        {
            return type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
        }


        #endregion

  

  

原文地址:https://www.cnblogs.com/lhlong/p/15206201.html