コード例 #1
0
 private void _migrator_MigrationError(object sender, MigrationEventArgs e)
 {
     _migrator.MigrationProcessBegin -= _migrator_MigrationProcessBegin;
     _migrator.MigrationProcessEnd -= _migrator_MigrationProcessEnd;
     _migrator.PackageMigrated -= _migrator_PackageMigrated;
     _migrator.PackageMigrating -= _migrator_PackageMigrating;
     _migrator.TableMigrated -= _migrator_TableMigrated;
     _migrator.TableMigrating -= _migrator_TableMigrating;
     _migrator.Fixing -= _migrator_Fixing;
     _migrator.Fixed -= _migrator_Fixed;
     _migrator.MigrationError -= _migrator_MigrationError;
     _migrator.Running = false;
     _migrator.Error = true;
     _log += e.Message;
 }
コード例 #2
0
 private void _migrator_MigrationProcessEnd(object sender, MigrationEventArgs e)
 {
     _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", _endTime, e.Message);
     _log += string.Format("Total time: {0:hh\\:mm\\:ss}\n", (_endTime - _beginTime));
     _log += "\n======================================================================\n";
     _endTime = DateTime.Now;
     _migrator.MigrationProcessBegin -= _migrator_MigrationProcessBegin;
     _migrator.MigrationProcessEnd -= _migrator_MigrationProcessEnd;
     _migrator.PackageMigrated -= _migrator_PackageMigrated;
     _migrator.PackageMigrating -= _migrator_PackageMigrating;
     _migrator.TableMigrated -= _migrator_TableMigrated;
     _migrator.TableMigrating -= _migrator_TableMigrating;
     _migrator.Fixing -= _migrator_Fixing;
     _migrator.Fixed -= _migrator_Fixed;
     _migrator.MigrationError -= _migrator_MigrationError;
     _migrator.Running = false;
     _migrator.Success = true;
 }
コード例 #3
0
 private void _migrator_MigrationProcessBegin(object sender, MigrationEventArgs e)
 {
     _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", _beginTime, e.Message);
 }
コード例 #4
0
 private void _migrator_PackageMigrated(object sender, MigrationEventArgs e)
 {
     _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : End import package {1}, {2} records imported\n", DateTime.Now, e.Package, e.MigratedRecords);
 }
コード例 #5
0
 private void _migrator_TableMigrated(object sender, MigrationEventArgs e)
 {
     _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", DateTime.Now, e.Message);
 }
コード例 #6
0
 private void _migrator_Fixing(object sender, MigrationEventArgs e)
 {
     _log += "\n============================\n" + e.Message + "\n";
 }
コード例 #7
0
 /*public ActionResult GetLog()
 {
     return Json(new { Log = _log, _migrator.Running, Success = !_migrator.Running && _migrator.Success, _migrator.MigrateStatus }, JsonRequestBehavior.AllowGet);
 }*/
 #region private function
 private void _migrator_Fixed(object sender, MigrationEventArgs e)
 {
     _log += e.Message + "\n";
 }
コード例 #8
0
        /// <summary>
        /// execute the migration process
        /// iterate the fieldsMaps, query the source and bulkCopy t des
        /// </summary>
        public void Run()
        {
            MigrateStatus = MigratorStatus.Running;

            var start = DateTime.Now;

            Logging.PushInfo("=======================================================================\n\nStart Migrating at : " + start.ToString(CultureInfo.InvariantCulture));

            _running = true;
            try
            {
                //raise migration process begin event
                if (MigrationProcessBegin != null)
                {
                    TableMigratedCount = 0;
                    MigrationProcessBegin(this, new MigrationEventArgs() { Message = "Migration process begin..." });
                }

                // Disable all triggers
                /*using (var conn = new SqlConnection(_destinationConnectionString))
                {
                    Logging.PushInfo("Start Disable all triggers");
                    conn.Open();
                    const string disableTriggerSql = "sp_MSforeachtable 'alter table ? disable trigger all'";
                    Logging.PushInfo("Command : " + disableTriggerSql);
                    var disableTriggerCmd = new SqlCommand(disableTriggerSql, conn);
                    disableTriggerCmd.CommandTimeout = Int32.MaxValue;
                    disableTriggerCmd.ExecuteNonQuery();

                    Logging.PushInfo("End Disable all triggers");
                }*/

                //open connections
                var sourceConn = new SqlConnection(_soureConnectionString);

                sourceConn.Open();

                Utils.CreateIndexTableAdapt(sourceConn);

                Utils.CreateSupportTempDb(sourceConn);


                var desConn = new SqlConnection(_destinationConnectionString);

                desConn.Open();

                Utils.CreateUniqueIndex(desConn);

                var usersAdapt = Utils.GetListUserAdapt(sourceConn);

                //var listEmailDuplicate = new List<string>();

                if (usersAdapt.Any())
                {
                    foreach (var userAdapt in usersAdapt)
                    {
                        var isValid = true;//Utils.CheckExistEmail(desConn, TenantID, userAdapt.Email);
                        if (isValid)
                        {
                            MembershipCreateStatus createStatus;
                            var user = Membership.CreateUser(userAdapt.Email,
                                ConfigurationManager.AppSettings["DefaultPasswordNewUser"], userAdapt.Email,
                                Constants.PasswordQuestion,
                                Constants.PasswordAnswer, true, null, out createStatus);
                            if (createStatus == MembershipCreateStatus.Success)
                            {
                                if (user != null)
                                {
                                    var query = string.Format(QueryConstants.QueryInsertUserTempdb,
                                        SourceDbSystemAdapt,
                                        "[dbo].[users]", DestinationServer, "st_Security", "[dbo].[sec_User]",
                                        userAdapt.Email, ParseData.GetGuid(user.ProviderUserKey), TenantID, DatabaseID);
                                    using (SqlCommand command = new SqlCommand(query, sourceConn))
                                    {
                                        //Logging.PushInfo(query);
                                        command.ExecuteNonQuery();
                                    }
                                }
                            }
                            else if (createStatus == MembershipCreateStatus.DuplicateEmail ||
                                     createStatus == MembershipCreateStatus.DuplicateUserName)
                            {
                                //listEmailDuplicate.Add("'" + userAdapt.Email + "'");
                            }
                        }
                    }
                }

                if (desConn.State == ConnectionState.Open)
                {
                    desConn.Close();
                    desConn.Dispose();
                }

                //insert query to queue table


                Logging.PushInfo("===============Start Insert Query To Queue Table===================");

                Logging.PushInfo("Enable identity insert on table [SysproMigration].[dbo].[QueueMigrate]");

                var migrationConn1 = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration");

                var enableIdentityInsert = new SqlCommand("SET IDENTITY_INSERT [SysproMigration].[dbo].[QueueMigrate] ON", migrationConn1);
                enableIdentityInsert.ExecuteNonQuery();

                migrationConn1.CloseConnection();

                foreach (var fieldsMap in FieldsMaps)
                {
                    InsertQueryToQueue(fieldsMap, MigrationConnectionString);
                }

                Logging.PushInfo("===============End Insert Query To Queue Table===================");

                Logging.PushInfo("===============Start Read Query from Query Table===================");

                var migrationConn = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration");

                var sourceConnObject = SourceConnectionString.GetObjectConnection();
                var desConnObject = DestinationConnectionString.GetObjectConnection();

                var objectQueue = new QueueMigrate
                {
                    SourceServerName = sourceConnObject.DataSource,
                    SourceDatabaseCompany = sourceConnObject.InitialCatalog,

                    TargetServerName = desConnObject.DataSource,
                    TargetDatabaseCompany = desConnObject.InitialCatalog
                };

                var lstQueue = Utils.GetQueueMigrates(migrationConn, objectQueue);

                migrationConn.CloseConnection();

                foreach (var queue in lstQueue)
                {
                    var fieldmap = FieldsMaps.FirstOrDefault(t => t.Id == queue.FieldsMapId);
                    MigrateFromQueue(queue, fieldmap);
                }

               /* //iterate the fieldsMaps and migrate every tables
                foreach (var fieldsMap in _fieldsMapsCompany)
                {
                    MigrateNew(fieldsMap, _destinationConnectionString, sourceConn,
                        listEmailDuplicate.Any() ? string.Join(",", listEmailDuplicate) : "");
                }*/



                //raise migration process end event
                if (MigrationProcessEnd != null)
                {
                    MigrationProcessEnd(this, new MigrationEventArgs() { Message = "Migration process done!!" });
                }

                desConn = DestinationConnectionString.CreateAndOpenConnection("Target");
                Utils.DropUniqueIndex(desConn);
                desConn.CloseConnection();

                sourceConn = SourceConnectionString.CreateAndOpenConnection("Source");
                Utils.DropIndexTableAdapt(sourceConn);
                sourceConn.CloseConnection();

                // Enable all triggers
                using (var conn = new SqlConnection(_destinationConnectionString))
                {
                    Logging.PushInfo("Start Enable all triggers");
                    conn.Open();
                    const string enableTriggerSql = "sp_MSforeachtable 'alter table ? enable trigger all'";
                    Logging.PushInfo("Command : " + enableTriggerSql);
                    var enableTriggerCmd = new SqlCommand(enableTriggerSql, conn);
                    enableTriggerCmd.ExecuteNonQuery();

                    Logging.PushInfo("End Enable all triggers");
                }

                //UpdateMigratedRestList(_migratedFilePath);
                Success = true;
                MigrateStatus = MigratorStatus.CompletedMigrate;
                var finish = DateTime.Now;
                Logging.PushInfo("=======================================================================\n\nFinish Migrating at : " + finish.ToString(CultureInfo.InvariantCulture));
                Logging.PushInfo("Process time : " + finish.Subtract(start));
            }
            catch (Exception e)
            {
                if (MigrationError != null)
                {
                    var evg = new MigrationEventArgs { Message = string.Format("{0}\n{1}", e.Message, e.StackTrace) };
                    MigrationError(this, evg);
                    Error = true;
                    Running = false;
                    Logging.PutError("MigrateError : ", e);
                }
                //log.Error("Run : ", e);
            }
            finally
            {
                _running = false;
            }
        }