/// <summary> /// 迁移数据 /// </summary> /// <param name="db"></param> /// <returns></returns> public static void AddList(DataContext db, DataTable dt, ref Data_Log log) { try { if (db.config.DbType.ToLower() == AppEtl.DataDbType.SqlServer.ToLower()) { if (DataSchema.GetVersion(db) >= 10) { #region tvps using (var conn = new SqlConnection(db.config.ConnStr)) { conn.Open(); var cmd = conn.CreateCommand(); InitTvps(cmd, dt.TableName); cmd.CommandText = GetTvps(db, dt.TableName); var catParam = cmd.Parameters.AddWithValue(string.Format("@{0}", dt.TableName), dt); catParam.SqlDbType = SqlDbType.Structured; catParam.TypeName = dt.TableName; log.SuccessCount = cmd.ExecuteNonQuery(); if (log.SuccessCount > 0) { log.State = 1; } else { log.State = 0; } log.EndDateTime = DateTime.Now; conn.Close(); } #endregion } else { #region SqlBulkCopy using (var conn = new SqlConnection(db.config.ConnStr)) { conn.Open(); using (var bulk = new SqlBulkCopy(db.config.ConnStr, SqlBulkCopyOptions.UseInternalTransaction)) { bulk.DestinationTableName = dt.TableName; bulk.BatchSize = dt.Rows.Count; bulk.WriteToServer(dt); log.SuccessCount = dt.Rows.Count; log.State = 1; log.EndDateTime = DateTime.Now; } conn.Close(); } #endregion } } if (db.config.DbType.ToLower() == AppEtl.DataDbType.MySql.ToLower()) { #region 拼sql using (var conn = new MySqlConnection(db.config.ConnStr)) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = GetMySql(dt, db); log.SuccessCount = cmd.ExecuteNonQuery(); if (log.SuccessCount > 0) { log.State = 1; } else { log.State = 0; } log.EndDateTime = DateTime.Now; conn.Close(); } #endregion } if (db.config.DbType.ToLower() == AppEtl.DataDbType.Oracle.ToLower()) { #region odp.net特性 using (var conn = new OracleConnection(db.config.ConnStr)) { conn.Open(); var cmd = conn.CreateCommand(); //关闭日志 cmd.CommandText = string.Format("alter table {0} nologging", dt.TableName); cmd.ExecuteNonQuery(); cmd.ArrayBindCount = dt.Rows.Count; cmd.BindByName = true; GetOdpParam(dt, ref cmd, db, dt.TableName); log.SuccessCount = cmd.ExecuteNonQuery(); if (log.SuccessCount > 0) { log.State = 1; } else { log.State = 0; } log.EndDateTime = DateTime.Now; //开起日志 cmd.CommandText = string.Format("alter table {0} logging", dt.TableName); cmd.ExecuteNonQuery(); conn.Close(); } #endregion } } catch (Exception ex) { log.EndDateTime = DateTime.Now; log.SuccessCount = 0; log.State = 0; log.ErrorMsg = ex.StackTrace; } }