Esempio n. 1
0
        public bool ExecuteBlueCopy()
        {
            var IsBulkLoad = false;

            if (Entitys == null || Entitys.Length <= 0)
            {
                return(IsBulkLoad);
            }
            if (Entitys.First() == null && Entitys.Length == 1)
            {
                return(IsBulkLoad);
            }
            DataTable dt     = new DataTable();
            Type      type   = typeof(T);
            var       entity = this.Context.EntityMaintenance.GetEntityInfo <T>();

            dt.TableName = this.Builder.GetTranslationColumnName(entity.DbTableName);
            //创建属性的集合
            List <PropertyInfo> pList = new List <PropertyInfo>();

            //把所有的public属性加入到集合 并添加DataTable的列
            Array.ForEach(entity.Columns.ToArray(), p => {
                if (!p.IsIgnore && !p.IsOnlyIgnoreInsert)
                {
                    pList.Add(p.PropertyInfo); dt.Columns.Add(p.DbColumnName);
                }
            });
            DataRow row = null;

            foreach (T item in Entitys)
            {
                row = dt.NewRow();
                pList.ForEach(p =>
                {
                    var name = p.Name;
                    if (entity.Columns.Any(it => it.PropertyName == name))
                    {
                        name = entity.Columns.First(it => it.PropertyName == name).DbColumnName;
                    }
                    row[name] = GetValue(p, item);
                });
                dt.Rows.Add(row);
            }
            var           dllPath = AppDomain.CurrentDomain.BaseDirectory + "failFiles";
            DirectoryInfo dir     = new DirectoryInfo(dllPath);

            if (!dir.Exists)
            {
                dir.Create();
            }
            var fileName       = dllPath + "\\" + Guid.NewGuid().ToString() + ".csv";
            var dataTableToCsv = DataTableToCsvString(dt);

            File.WriteAllText(fileName, dataTableToCsv, new UTF8Encoding(false));
            MySqlConnection conn = this.Context.Ado.Connection as MySqlConnection;

            try
            {
                this.Context.Ado.Open();
                // IsolationLevel.Parse
                MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
                {
                    CharacterSet            = GetChara(),
                    FieldTerminator         = ",",
                    FieldQuotationCharacter = '"',
                    EscapeCharacter         = '"',
                    LineTerminator          = "\r\n",
                    FileName            = fileName,
                    NumberOfLinesToSkip = 0,
                    TableName           = dt.TableName,
                    Local = true,
                };
                bulk.Columns.AddRange(dt.Columns.Cast <DataColumn>().Select(colum => colum.ColumnName).Distinct().ToArray());
                IsBulkLoad = bulk.Load() > 0;
                //执行成功才删除文件
                if (IsBulkLoad && File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
            }
            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                CloseDb();
            }
            return(IsBulkLoad);;
        }