Esempio n. 1
0
    /// <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;
        }
    }