• mysql bulk大批量入库操作


    数据库批量插入Oracle中有 OracleBulkCopy,SQL当然也有个SqlBulkCopy .这里有介绍就不说,网上有非常详细的例子,大家可去搜索下,可是MySql确没有MySqlBulkCopy这个,网上找了很久也没找到。找到了一个 MySqlBulkLoader

       /// <summary>
            /// 批量插入
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="db"></param>
            /// <param name="dataList"></param>
            /// <returns></returns>
            public static ValidateResult BulkInsert<T>(List<T> dataList)
            {
                int insertCount = 0;
                ValidateResult result = new ValidateResult();
                if (dataList == null || dataList.Count == 0)
                {
                    result.Success = true;
                    result.Info = "传入的dataList没有数据";
                    return result;
                }
                string[] tableNames = typeof(T).ToString().Split('.');
                string tableName = tableNames[tableNames.Length - 1];
                string tmpPath = AppDomain.CurrentDomain.BaseDirectory + SystemUtil.OsPathSplitChar + "InTemp";
                if (!Directory.Exists(tmpPath))
                {
                    Directory.CreateDirectory(tmpPath);
                }
                //csv文件临时目录
                tmpPath = Path.Combine(tmpPath, tableName + "_Temp_" + Guid.NewGuid().ToString("N") + ".csv");
                List<PropertyInfo> propertys = dataList[0].GetType().GetProperties().Where(c => c.PropertyType.Namespace == "System").ToList();
                string csv = ListToCsv(dataList, propertys);
                File.WriteAllText(tmpPath, csv);
                string connString = System.Configuration.ConfigurationManager.ConnectionStrings["AssessConnection"].ToString();
                using (MySqlConnection conn = new MySqlConnection(connString))
                {
                    try
                    {
                        Stopwatch stopwatch = new Stopwatch();
                        stopwatch.Start();
                        conn.Open();
                        MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
                        {
                            CharacterSet = "UTF8",
                            FieldTerminator = ",",
                            FieldQuotationCharacter = '"',
                            EscapeCharacter = '"',
                            LineTerminator = SystemUtil.IsLinux() ? "
    " : "
    ",
                            FileName = tmpPath,
                            NumberOfLinesToSkip = 0,
                            TableName = tableName,
                        };
                        bulk.Columns.AddRange(propertys.Select(c => c.Name).ToList());//根据标题列对应插入
                        insertCount = bulk.Load();
                        stopwatch.Stop();
                        if (insertCount > 0)
                        {
                            result.Success = true;
                            result.Info = "提交成功";
                        }
                        else
                        {
                            result.Success = false;
                            result.Info = "提交失败";
                        }
                    }
                    catch (MySqlException ex)
                    {
                        result.Success = true;
                        result.Info = "插入内部错误" + ex.ToString();
                        return result;
                    }
                }
                //File.Delete(tmpPath);
                return result;
            }
    
            /// <summary>
            /// list转csv
            /// </summary>
            /// <param name="list"></param>
            /// <param name="propertys"></param>
            /// <returns></returns>
            private static string ListToCsv(IList list, List<PropertyInfo> propertys)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var item in list)
                {
                    for (int i = 0; i < propertys.Count; i++)
                    {
                        var prop = propertys[i];
                        if (i != 0) sb.Append(",");
                        string val = Convert.ToString(prop.GetValue(item, null));
                        if (prop.PropertyType == typeof(bool))
                        {
                            val = val == "True" ? "1" : "0";
                            sb.Append(val);
                        }
                        else if (prop.PropertyType == typeof(DateTime))
                        {
                            val = Convert.ToDateTime(val).ToString("yyyy-MM-dd HH:mm:ss");
                            sb.Append(val);
                        }
                        else if (prop.PropertyType == typeof(DateTime?))
                        {
                            if (val == null)
                            {
                                val = "Null";
                                sb.Append(val);
                            }
                            else
                            {
                                val = Convert.ToDateTime(val).ToString("yyyy-MM-dd HH:mm:ss");
                                sb.Append(val);
                            }
                        }
                        else if (prop.PropertyType == typeof(string) && val.Contains(","))
                        {
                            sb.Append(""" + val.Replace(""", """") + """);
                        }
                        else
                        {
                            sb.Append(val);
                        }
                    }
                    sb.AppendLine();
                }
                return sb.ToString();
            }
    

      

  • 相关阅读:
    uva12436 回头再做一次
    Redhat中网络启动错误解决办法( Failed to start LSB: Bring up/down networking RTNETLINK answers: File exists)
    LNMP环境搭建Wordpress博客
    LNMP环境搭建Wordpress博客
    LAMP环境搭建一个Discuz论坛
    LAMP环境搭建一个Discuz论坛
    常见的SQL语句
    常见的SQL语句
    Linux系统中安装软件的几种方式
    Linux系统中安装软件的几种方式
  • 原文地址:https://www.cnblogs.com/jiaxuekai/p/13864900.html
Copyright © 2020-2023  润新知