protected override void ExecuteTask()
        {
            var server = new Server(ServerName);
            server.ConnectionContext.LoginSecure = true;
            server.ConnectionContext.Connect();

            if (!ReplaceDB)
            {
                if (server.Databases.Contains(DBName))
                {
                    Log(Level.Info, DBName + " exists on " + ServerName + " and will not be replaced");
                    return;
                }
            }

            Log(Level.Info, "Restoring database " + DBName + " to " + ServerName);
            var restore = new Restore();
            restore.Database = DBName;
            restore.ReplaceDatabase = ReplaceDB;
            restore.Action = RestoreActionType.Database;
            restore.Devices.AddDevice(BackupPath, DeviceType.File);

            var table = restore.ReadFileList(server);
            restore.RelocateFiles.Add(new RelocateFile(table.Rows[0][0].ToString(), Path.Combine(server.Settings.DefaultFile, DBName + ".mdf")));
            restore.RelocateFiles.Add(new RelocateFile(table.Rows[1][0].ToString(), Path.Combine(server.Settings.DefaultFile, DBName + "_Log.ldf")));

            restore.PercentComplete += UpdatePercent;
            restore.Complete += RestoreCompleted;

            restore.SqlRestore(server);

            if (server.ConnectionContext.IsOpen)
                server.ConnectionContext.Disconnect();
        }
        public static void RestoreDatabase(this Server server, string databaseName, string filePath)
        {
            var res = new Restore();

            res.Devices.AddDevice(filePath, DeviceType.File);

            var DataFile = new RelocateFile();
            string MDF = res.ReadFileList(server).Rows[0][1].ToString();
            DataFile.LogicalFileName = res.ReadFileList(server).Rows[0][0].ToString();
            DataFile.PhysicalFileName = server.Databases[databaseName].FileGroups[0].Files[0].FileName;

            var LogFile = new RelocateFile();
            string LDF = res.ReadFileList(server).Rows[1][1].ToString();
            LogFile.LogicalFileName = res.ReadFileList(server).Rows[1][0].ToString();
            LogFile.PhysicalFileName = server.Databases[databaseName].LogFiles[0].FileName;

            res.RelocateFiles.Add(DataFile);
            res.RelocateFiles.Add(LogFile);

            res.Database = databaseName;
            res.NoRecovery = false;
            res.ReplaceDatabase = true;
            res.SqlRestore(server);
        }
Exemple #3
0
        public static bool DbRestore(System.Windows.Forms.OpenFileDialog backup, String databaseName)
        {
            try
            {
                dboperation db = new dboperation();
                dboperation.GetConn("master");
                ServerConnection conn = new ServerConnection();
                conn.ServerInstance = ServerInstance();
                Server  srv = new Server(conn);
                Restore res = new Restore();
                res.Devices.AddDevice(backup.FileName, DeviceType.File);
                RelocateFile DataFile = new RelocateFile();
                string       MDF      = res.ReadFileList(srv).Rows[0][1].ToString();
                DataFile.LogicalFileName  = res.ReadFileList(srv).Rows[0][0].ToString();
                DataFile.PhysicalFileName = srv.Databases[databaseName].FileGroups[0].Files[0].FileName;

                RelocateFile LogFile = new RelocateFile();
                string       LDF     = res.ReadFileList(srv).Rows[1][1].ToString();
                LogFile.LogicalFileName  = res.ReadFileList(srv).Rows[1][0].ToString();
                LogFile.PhysicalFileName = srv.Databases[databaseName].LogFiles[0].FileName;

                res.RelocateFiles.Add(DataFile);
                res.RelocateFiles.Add(LogFile);

                res.Database        = databaseName;
                res.NoRecovery      = true;
                res.ReplaceDatabase = true;
                res.SqlRestore(srv);
                conn.Disconnect();
                return(true);
            }
            catch (Exception)
            {
            }
            return(false);
        }
Exemple #4
0
        /// <summary>
        ///   Restores each of the backups. If the default file location is available it will move the files to there.
        /// </summary>
        /// <param name="backupOrder">An ordered list of backups to apply.</param>
        /// <param name="databaseName">Database to restore to.</param>
        /// <param name="fileRelocation">Option for renaming files during the restore.</param>
        public void Restore(IEnumerable <BackupMetadata> backupOrder, string databaseName,
                            Func <string, string> fileRelocation = null)
        {
            var restore = new Restore {
                Database = databaseName, NoRecovery = true
            };

            foreach (var backup in backupOrder)
            {
                var device           = BackupFileTools.IsUrl(backup.PhysicalDeviceName) ? DeviceType.Url : DeviceType.File;
                var backupDeviceItem = new BackupDeviceItem(backup.PhysicalDeviceName, device);
                if (_credentialName != null && device == DeviceType.Url)
                {
                    backupDeviceItem.CredentialName = _credentialName;
                }

                restore.Devices.Add(backupDeviceItem);

                var defaultFileLocations = DefaultFileLocations();
                if (defaultFileLocations != null)
                {
                    restore.RelocateFiles.Clear();
                    foreach (var file in restore.ReadFileList(_server).AsEnumerable())
                    {
                        var physicalName = (string)file["PhysicalName"];
                        var fileName     = Path.GetFileName(physicalName) ??
                                           throw new InvalidBackupException($"Physical name in backup is incomplete: {physicalName}");

                        if (fileRelocation != null)
                        {
                            fileName = fileRelocation(fileName);
                        }

                        var path = (string)file["Type"] == "L" ? defaultFileLocations?.Log : defaultFileLocations?.Data;
                        path = path ?? Path.GetFullPath(physicalName);

                        var newFilePath = Path.Combine(path, fileName);

                        restore.RelocateFiles.Add(new RelocateFile((string)file["LogicalName"], newFilePath));
                    }
                }

                _server.ConnectionContext.StatementTimeout = 86400; // 60 * 60 * 24 = 24 hours

                restore.SqlRestore(_server);
                restore.Devices.Remove(backupDeviceItem);
            }
        }
Exemple #5
0
        /// <summary>
        /// Restore Database and Log on target server from backup files.
        /// </summary>
        /// <param name="fileShare">Location of backup files</param>
        /// <param name="targetServer">Destination server</param>
        /// <param name="dbName">Name of the database to be restored</param>
        /// <param name="noRecovery">Gets or sets a Restore.NoRecovery property value that determines whether the tail of the log is backed up and whether the database is restored into the 'Restoring' state</param>
        /// <param name="deleteBackupFiles">If true, backup files will be deleted after restore operation is complete</param>
        public static void RestoreDatabase(string fileShare, SMO.Server targetServer, string dbName, bool noRecovery, bool deleteBackupFiles)
        {
            string backupFilePath;
            string dataDirectory = targetServer.InstallDataDirectory;

            foreach (BackupActionType backupType in new List <BackupActionType> {
                BackupActionType.Database, BackupActionType.Log
            })
            {
                backupFilePath = Path.Combine(fileShare, string.Format(backupFileNameTemplate, dbName, backupType.ToString()));

                BackupDeviceItem backupDeviceItem = new BackupDeviceItem(backupFilePath, DeviceType.File);

                //restore on the destination
                Restore restore = new Restore();
                restore.Action     = (backupType == BackupActionType.Database) ? RestoreActionType.Database : RestoreActionType.Log;
                restore.NoRecovery = (backupType == BackupActionType.Log && noRecovery == false) ? false : true;
                restore.Devices.Add(backupDeviceItem);
                restore.Database        = dbName;
                restore.ReplaceDatabase = false;
                DataTable logicalFilesDt        = restore.ReadFileList(targetServer);
                DataRow[] foundLogicalFilesRows = logicalFilesDt.Select();
                if (!string.IsNullOrEmpty(dataDirectory))
                {
                    foreach (DataRow row in foundLogicalFilesRows)
                    {
                        string logicalFileName  = row["LogicalName"].ToString();
                        string physicalFileName = (logicalFileName.EndsWith("_log", StringComparison.OrdinalIgnoreCase)) ?
                                                  Path.Combine(dataDirectory, string.Format(CultureInfo.InvariantCulture, "{0}.ldf", logicalFileName)) :
                                                  Path.Combine(dataDirectory, string.Format(CultureInfo.InvariantCulture, "{0}.mdf", logicalFileName));
                        restore.RelocateFiles.Add(new RelocateFile(logicalFileName, physicalFileName));
                    }
                }

                foreach (string script in restore.Script(targetServer))
                {
                }
                restore.SqlRestore(targetServer);

                if (deleteBackupFiles)
                {
                    File.Delete(backupFilePath);
                }
            }
        }
        public void CreateDatabaseFromBackupFile(
            string databaseName,
            string backupFilePath)
        {
            DropDatabase(databaseName);

            using (var cn = new SqlConnection(m_ConnectionString))
            {
                cn.Open();

                var sc = new ServerConnection(cn);

                var srv = new Server(sc);

                var res = new Restore
                {
                    NoRecovery = false,
                    Database   = databaseName
                };
                res.Devices.AddDevice(backupFilePath, DeviceType.File);

                //
                // Db files path (on the SQL server!)
                //
                DataTable fileList = res.ReadFileList(srv);

                foreach (DataRow file2Relocate in fileList.Rows)
                {
                    res.RelocateFiles.Add(new RelocateFile(
                                              // Logical name in the backup
                                              (string)file2Relocate["LogicalName"],

                                              // New physical name
                                              Path.Combine(
                                                  srv.Databases["master"].PrimaryFilePath,
                                                  Path.ChangeExtension(
                                                      databaseName,
                                                      Path.GetExtension((string)file2Relocate["PhysicalName"])))));
                }


                res.SqlRestore(srv);
            }
        }
Exemple #7
0
        public void RestoreDatabase(String databaseName, String backUpFile)
        {
            //var connection = new ServerConnection("dev.empirisense.com", "hari", "hari123");
            //var connection = new ServerConnection(Properties.Settings.Default.ServerName, Properties.Settings.Default.UserName, Properties.Settings.Default.Password);
            var connection  = new ServerConnection(new SqlConnection(Properties.Settings.Default.AryaDbConnectionString));
            var sqlServer   = new Server(connection);
            var rstDatabase = new Restore {
                Action = RestoreActionType.Database, Database = databaseName
            };
            var bkpDevice = new BackupDeviceItem(backUpFile, DeviceType.File);

            rstDatabase.Devices.Add(bkpDevice);
            var logicalRestoreFiles = rstDatabase.ReadFileList(sqlServer);

            rstDatabase.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), @"E:\MSSQL\Data\" + databaseName + ".mdf"));
            rstDatabase.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), @"D:\MSSQL\Data\" + databaseName + ".ldf"));
            rstDatabase.ReplaceDatabase = true;
            rstDatabase.SqlRestore(sqlServer);
        }
Exemple #8
0
        public static bool CreateDB(string serverName, string dbName, string backupPath, string organisationCode)
        {
            Server server = new Server(serverName);

            try
            {
                server.ConnectionContext.LoginSecure = false;
                server.ConnectionContext.Login       = ConfigurationSettings.AppSettings["DbUser"].ToString();
                server.ConnectionContext.Password    = ConfigurationSettings.AppSettings["DbPassword"].ToString();
                string mdfLogicalName   = ConfigurationSettings.AppSettings["MDFLogicalName"].ToString();
                string ldfLogicalName   = ConfigurationSettings.AppSettings["LDFLogicalName"].ToString();
                string dbRelocationPath = ConfigurationSettings.AppSettings["DBRelocationPath"].ToString();

                Restore restore = new Restore();
                restore.Database = dbName;
                restore.Action   = RestoreActionType.Database;
                restore.Devices.AddDevice(backupPath, DeviceType.File);
                restore.NoRecovery = false;
                System.Data.DataTable logicalFiles = restore.ReadFileList(server);
                if (!System.IO.Directory.Exists(dbRelocationPath + "Organisations\\Organisation" + organisationCode))
                {
                    System.IO.Directory.CreateDirectory(dbRelocationPath + "Organisations\\Organisation" + organisationCode);
                }
                restore.RelocateFiles.Add(new RelocateFile(mdfLogicalName, dbRelocationPath + "Organisations\\Organisation" + organisationCode + "\\" + dbName + ".mdf"));
                restore.RelocateFiles.Add(new RelocateFile(ldfLogicalName, dbRelocationPath + "Organisations\\Organisation" + organisationCode + "\\" + dbName + ".ldf"));
                restore.PercentCompleteNotification = 10;
                server.ConnectionContext.Connect();
                int count = server.Databases.Count;
                restore.SqlRestore(server);
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
            finally
            {
                if (server.ConnectionContext.IsOpen)
                {
                    server.ConnectionContext.Disconnect();
                }
            }
        }
Exemple #9
0
        public static bool DbRestoreEx(string string_0, string string_1, string string_2, string string_3,
                                       string string_4)
        {
            bool      flag           = false;
            string    columnString   = "";
            Restore   restoreClass   = new Restore();
            SQLServer sQLServerClass = new SQLServer();

            try
            {
                try
                {
                    sQLServerClass.LoginSecure = false;
                    sQLServerClass.Connect(string_0.Trim(), string_1.Trim(), string_2.Trim());
                    restoreClass.Action     = 0;
                    restoreClass.Database   = string_3.Trim();
                    restoreClass.Files      = string_4;
                    restoreClass.FileNumber = 1;


                    columnString = restoreClass.ReadFileList(sQLServerClass).GetColumnString(1, 2);
                    columnString = columnString.Substring(0, columnString.LastIndexOf('\\'));
                    if (!Directory.Exists(columnString))
                    {
                        Directory.CreateDirectory(columnString);
                    }
                    restoreClass.ReplaceDatabase = true;
                    restoreClass.SQLRestore(sQLServerClass);
                    flag = true;
                }
                catch (Exception exception)
                {
                    exception.ToString();
                    MessageBox.Show("请删除与要恢复的数据库同名的数据文件");
                }
            }
            finally
            {
                sQLServerClass.DisConnect();
            }
            return(flag);
        }
        public void RestoreDataBase(string backupFilePath, string destinationDatabaseName, string databaseFolder, string databaseFileName, string databaseLogFileName)
        {
            try
            {
                Server  srv     = GetServer();
                Restore restore = new Restore {
                    Database = destinationDatabaseName, Action = RestoreActionType.Database
                };
                Database database = srv.Databases[destinationDatabaseName];

                if (database != null)
                {
                    srv.KillAllProcesses(destinationDatabaseName);
                    string primaryFilePath = database.PrimaryFilePath;
                    if (backupFilePath != null)
                    {
                        restore.Devices.AddDevice(backupFilePath, DeviceType.File);
                    }
                    DataTable datosbackup = restore.ReadFileList(srv);
                    restore.ReplaceDatabase = true;

                    //restore.NoRecovery = true;

                    string physicalFileName = String.Format(@"{0}\{1}.mdf", primaryFilePath, destinationDatabaseName);
                    string str3             = String.Format(@"{0}\{1}_log.ldf", primaryFilePath, destinationDatabaseName);
                    restore.RelocateFiles.Add(new RelocateFile(datosbackup.Rows[0][0].ToString(), physicalFileName));
                    restore.RelocateFiles.Add(new RelocateFile(datosbackup.Rows[1][0].ToString(), str3));
                }

                //restore.ReplaceDatabase = true;
                restore.PercentCompleteNotification = 5;
                restore.PercentComplete            += Progreso_PercentComplete;
                restore.Complete += Progreso_Complete;
                restore.SqlRestore(srv);
                srv.Databases[destinationDatabaseName].SetOnline();
                srv.Databases[destinationDatabaseName].Refresh();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #11
0
 public static void RestoreDatabase()
 {
     try
     {
         ServerConnection connection  = new ServerConnection(@"Server\instance", "uname", "PWD");
         Server           sqlServer   = new Server(connection);
         Restore          rstDatabase = new Restore();
         rstDatabase.Action   = RestoreActionType.Database;
         rstDatabase.Database = "H5MI_Automation_Restore_Backup";
         BackupDeviceItem bkpDevice = new BackupDeviceItem(@"E:\DATA\QA_SP\MSSQL11.QA_SP\MSSQL\Backup\H5MI_Automation.bak", DeviceType.File);
         rstDatabase.Devices.Add(bkpDevice);
         rstDatabase.ReplaceDatabase = true;
         //As mentioned in the above solution this code will take care .mdf and .ldf file location issue
         foreach (DataRow r in rstDatabase.ReadFileList(sqlServer).Rows)
         {
             var relocateFile = new RelocateFile();
             relocateFile.LogicalFileName = r["LogicalName"].ToString();
             Console.WriteLine(relocateFile.LogicalFileName);
             var physicalName = r["PhysicalName"].ToString();
             Console.WriteLine(physicalName);
             var path = System.IO.Path.GetDirectoryName(physicalName);
             Console.WriteLine(path);
             var filename = System.IO.Path.GetFileName(physicalName);
             Console.WriteLine(filename);
             physicalName = path + @"\H5MI_Automation_Restore_Backup_" + filename;
             Console.WriteLine(physicalName);
             relocateFile.PhysicalFileName = physicalName;
             Console.WriteLine(relocateFile.PhysicalFileName);
             Console.WriteLine(relocateFile);
             rstDatabase.RelocateFiles.Add(relocateFile);
         }
         rstDatabase.SqlRestore(sqlServer);
         connection.Disconnect();
     }
     catch (Exception e)
     {
         Console.Write(e);
     }
 }
        public BackupInfo GetBackupInfo(string backupFileName, Server server)
        {
            var restoreDb = new Restore();
            var info = new BackupInfo();
            restoreDb.Action = RestoreActionType.Database;
            restoreDb.Devices.AddDevice(backupFileName, DeviceType.File);
            DataTable fileList = restoreDb.ReadFileList(server);

            foreach (DataRow row in fileList.Rows)
            {
                if (row.Field<string>("Type").Equals("D"))
                {
                    info.DataLogicalName = row.Field<string>("LogicalName");
                }
                else if (row.Field<string>("Type").Equals("L"))
                {
                    info.LogFiles.Add(new DatabaseFile {LogicalName = row.Field<string>("LogicalName")});
                }
            }

            return info;
        }
        public void Verify()
        {
            if (string.IsNullOrEmpty(AttachDbFilename))
            {
                MessageBox.Show("Please select file");
                return;
            }

            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                var rest = new Restore();
                rest.Devices.AddDevice(AttachDbFilename, DeviceType.File);
                bool verifySuccessful = rest.SqlVerify(Srv);

                if (verifySuccessful)
                {
                    MessageBox.Show("Backup Verified!", "SMO Demos");
                    DataTable dt = rest.ReadFileList(Srv);
                    //  this.dataGridView1.DataSource = dt;
                }
                else
                {
                    MessageBox.Show("Backup NOT Verified!", "SMO Demos");
                }
            }
            catch (SmoException exSMO)
            {
                MessageBox.Show(exSMO.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                Mouse.OverrideCursor = null;
            }
        }
        private void btnVerify_Click(object sender, EventArgs e)
        {
            Restore rest     = new Restore();
            string  fileName = this.txtFileName.Text;

            this.Cursor = Cursors.WaitCursor;
            this.dataGridView1.DataSource = string.Empty;

            try
            {
                rest.Devices.AddDevice(fileName, DeviceType.File);
                bool verifySuccessful = rest.SqlVerify(srv);

                if (verifySuccessful)
                {
                    MessageBox.Show("Backup Verified!", "SMO Demos");
                    DataTable dt = rest.ReadFileList(srv);
                    this.dataGridView1.DataSource = dt;
                }
                else
                {
                    MessageBox.Show("Backup NOT Verified!", "SMO Demos");
                }
            }
            catch (SmoException exSMO)
            {
                MessageBox.Show(exSMO.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
Exemple #15
0
        public bool RestoreDatabase(string database, string filePath)
        {
            using (var sqlConnection = new SqlConnection(ConfigUtil.GetConnectionString()))
            {
                ServerConnection conn = new ServerConnection(ConfigUtil.GetServerName(), ConfigUtil.GetUserName(), ConfigUtil.GetPassword());
                srv = new Server(conn);

                try
                {
                    res = new Restore()
                    {
                        Database        = database,
                        NoRecovery      = false,
                        ReplaceDatabase = true
                    };


                    res.PercentComplete += new PercentCompleteEventHandler(Restore_PercentComplete);
                    res.Devices.AddDevice(filePath, DeviceType.File);

                    var DataFile = new RelocateFile();
                    var MDF      = res.ReadFileList(srv).Rows[0][1].ToString();
                    DataFile.LogicalFileName  = res.ReadFileList(srv).Rows[0][0].ToString();
                    DataFile.PhysicalFileName = srv.Databases[database].FileGroups[0].Files[0].FileName;

                    var LogFile = new RelocateFile();
                    var LDF     = res.ReadFileList(srv).Rows[1][1].ToString();
                    LogFile.LogicalFileName  = res.ReadFileList(srv).Rows[1][0].ToString();
                    LogFile.PhysicalFileName = srv.Databases[database].LogFiles[0].FileName;

                    res.RelocateFiles.Add(DataFile);
                    res.RelocateFiles.Add(LogFile);

                    this.KillProcesses(database);

                    //this.viewModel.RestoreStarted = true;

                    res.SqlRestore(srv);

                    return(true);
                }
                catch (SmoException ex)
                {
                    var innerExceptionMessage = "";
                    if (ex.InnerException != null)
                    {
                        innerExceptionMessage = ex.InnerException.Message;
                    }
                    MessageBox.Show(string.Format("{0}\n\n{1}", ex.Message, innerExceptionMessage));
                    return(false);
                }
                catch (IOException ex)
                {
                    MessageBox.Show(ex.Message);
                    return(false);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return(false);
                }
            }
        }
        public Response Task()
        {
            Response response    = new Response();
            string   dbBakFile   = _db.File.FullName;
            string   dbtoRestore = _db.DatabaseName;

            if (string.IsNullOrEmpty(dbBakFile) || !File.Exists(dbBakFile))
            {
                response.Status  = Response.ResponseMessage.Failed;
                response.Message = "No such .bak file found.";
                return(response);
            }

            var smoServer = _db.Server;

            var db = smoServer.Databases[dbtoRestore];

            if (db != null)
            {
                smoServer.KillAllProcesses(dbtoRestore);
                log.Debug("All processes on db killed");
                db.SetOffline();
            }

            string dataPath = UtilityConfig.GetMachineConfigValue("DataPath");
            string dbPath   = Path.Combine(dataPath, dbtoRestore + ".mdf");
            string logPath  = Path.Combine(dataPath, dbtoRestore + ".ldf");

            var restore    = new Restore();
            var deviceItem = new BackupDeviceItem(dbBakFile, DeviceType.File);

            restore.ReplaceDatabase             = true;
            restore.PercentCompleteNotification = 10;
            restore.PercentComplete            += restore_PercentComplete;
            restore.Complete += restore_Complete;

            try
            {
                restore.Devices.Add(deviceItem);
                if (db != null)
                {
                    DataTable dtFileList     = restore.ReadFileList(smoServer);
                    string    dbLogicalName  = dtFileList.Rows[0][0].ToString();
                    string    logLogicalName = dtFileList.Rows[1][0].ToString();
                    restore.RelocateFiles.Add(new RelocateFile(dbLogicalName, dbPath));
                    restore.RelocateFiles.Add(new RelocateFile(logLogicalName, logPath));
                }
                else
                {
                    Database  smoDatabase = new Database(smoServer, dbtoRestore);
                    FileGroup fg          = new FileGroup(smoDatabase, "PRIMARY");
                    smoDatabase.FileGroups.Add(fg);
                    DataFile df = new DataFile(fg, dbtoRestore, dbPath);
                    df.IsPrimaryFile = true;
                    fg.Files.Add(df);

                    LogFile lf = new LogFile(smoDatabase, dbtoRestore + "_log", logPath);
                    smoDatabase.LogFiles.Add(lf);
                    smoDatabase.Create();
                    smoServer.Refresh();
                    smoServer.KillAllProcesses(dbtoRestore);
                    log.Debug("All processes on db killed");
                    smoServer.Databases[dbtoRestore].SetOffline();
                    //restore.DatabaseFiles.Add(dbPath);
                    //restore.DatabaseFiles.Add(logPath);
                    DataTable dtFileList     = restore.ReadFileList(smoServer);
                    string    dbLogicalName  = dtFileList.Rows[0][0].ToString();
                    string    logLogicalName = dtFileList.Rows[1][0].ToString();
                    restore.RelocateFiles.Add(new RelocateFile(dbLogicalName, dbPath));
                    restore.RelocateFiles.Add(new RelocateFile(logLogicalName, logPath));
                }
                restore.Database   = dbtoRestore;
                restore.FileNumber = 1;
                restore.Action     = RestoreActionType.Files;
                restore.SqlRestore(smoServer);
                db = smoServer.Databases[dbtoRestore];
                db.SetOnline();
                smoServer.Refresh();
                db.Refresh();
            }
            catch (Exception ex)
            {
                // cleanup
                smoServer.Refresh();
                db = smoServer.Databases[dbtoRestore];

                if (db != null)
                {
                    db.Drop();
                }
                if (File.Exists(dbPath))
                {
                    File.Delete(dbPath);
                }
                if (File.Exists(logPath))
                {
                    File.Delete(dbPath);
                }

                response.Status  = Response.ResponseMessage.Failed;
                response.Message = ex.GetExceptionMessages();
                return(response);
            }

            response.Status  = Response.ResponseMessage.Succeeded;
            response.Message = string.Format("{0} file restored to database {1}.", _db.File.Name, dbtoRestore);
            return(response);
        }
Exemple #17
0
        public void RestoreDatabase(SqlConnection connection, string dbName, string filePath)
        {
            using (connection)
            {
                connection.Open();
                Server   srv = new Server(new ServerConnection(connection));
                Database db  = GetDatabase(srv, dbName);
                //srv.KillAllProcesses(db.Name);

                // Define a Restore object variable.
                Restore rs = new Restore();

                if (db.UserAccess != DatabaseUserAccess.Single)
                {
                    db.UserAccess = DatabaseUserAccess.Single;
                    db.Alter(TerminationClause.RollbackTransactionsImmediately);
                    db.Refresh();
                }

                try
                {
                    rs.Action          = RestoreActionType.Database;
                    rs.ReplaceDatabase = true;
                    //rs.Restart = true;

                    // Set the NoRecovery property to true, so the transactions are not recovered.
                    rs.NoRecovery = false;
                    //http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fe8dd4c4-3550-48cd-baaf-fae9246ff87a/smo-restore-unable-to-complete-restore?forum=sqlsmoanddmo

                    // Specify the database name.
                    rs.Database = db.Name;

                    // Declare a BackupDeviceItem by supplying the backup device file name in the constructor, and the type of device is a file.
                    BackupDeviceItem bdi = default(BackupDeviceItem);
                    bdi = new BackupDeviceItem(filePath, DeviceType.File);

                    // Add the device that contains the full database backup to the Restore object.
                    rs.Devices.Add(bdi);

                    var dataFile = new RelocateFile
                    {
                        LogicalFileName  = rs.ReadFileList(srv).Rows[0][0].ToString(),
                        PhysicalFileName = srv.Databases[dbName].FileGroups[0].Files[0].FileName
                    };

                    var logFile = new RelocateFile
                    {
                        LogicalFileName  = rs.ReadFileList(srv).Rows[1][0].ToString(),
                        PhysicalFileName = srv.Databases[dbName].LogFiles[0].FileName
                    };

                    rs.RelocateFiles.Add(dataFile);
                    rs.RelocateFiles.Add(logFile);

                    connection.ChangeDatabase("master"); // You cannot restore a database that you are connected to

                    rs.PercentCompleteNotification = 1;
                    rs.PercentComplete            += Restore_PercentComplete;
                    rs.Complete += Restore_Complete;

                    // Restore the full database backup with no recovery.
                    rs.SqlRestore(srv); //SqlRestoreAsync won't fire Complete event ?
                }
                finally
                {
                    db.UserAccess = DatabaseUserAccess.Multiple;
                    db.Alter(TerminationClause.RollbackTransactionsImmediately);
                    db.Refresh();
                }
            }
        }
        public void Created(string source, string desc, string database)
        {
            try
            {
                var fileInfo = new FileInfo(source);
                if (!fileInfo.Exists)
                {
                    RaiseCreatedErrorEventHander("Không thể tạo được cơ sở dữ liệu.\nChi Tiết:\n\tCở dữ liệu nguồn không tồn tại vui lòng cài đặt lại phần mềm");
                    return;
                }
                if (!Directory.Exists(desc))
                {
                    RaiseCreatedErrorEventHander("Không thể tạo được cơ sở dữ liệu.\nChi Tiết:\n\tThư mục tạo cơ sở dữ liệu không tồn tại.Vui lòng tạo hay chọn một thư mục khác.");
                    return;
                }

                var backupFilePath = source;
                var destinationDatabaseName = database;
                var databaseFolder = desc;

                var cnn = new SqlConnection(_mConnectString);
                cnn.Open();
                var conn = new ServerConnection(cnn);
                var myServer = new Server(conn);
                //var db = new Database(myServer, database);

               // db.StoredProcedures.ItemById(0).Script(new ScriptingOptions());

                var myRestore = new Restore {Database = destinationDatabaseName};

                //Database currentDb = myServer.Databases[destinationDatabaseName];
                //if (currentDb != null)
                //myServer.KillAllProcesses(destinationDatabaseName);

                myRestore.Devices.AddDevice(backupFilePath, DeviceType.File);
                var dt = myRestore.ReadFileList(myServer);
                var databaseFileName = "ERP";
                var databaseLogFileName = "ERP_Log";
                if (dt == null)
                {
                    RaiseCreatedErrorEventHander("Không thể tạo được cơ sở dữ liệu.\nChi Tiết:\n\tTập tin cơ sở dữ liệu nguồn không đúng, vui lòng cài đặt lại phần mềm.");
                    return;
                }
                if (dt.Rows.Count != 0)
                {
                    databaseFileName = dt.Rows[0][0].ToString();
                    databaseLogFileName = dt.Rows[1][0].ToString();
                }

                var dataFileLocation = databaseFolder + "\\" + destinationDatabaseName + ".mdf";
                var logFileLocation = databaseFolder + "\\" + destinationDatabaseName + "_log.ldf";
                myRestore.RelocateFiles.Add(new RelocateFile(databaseFileName, dataFileLocation));
                myRestore.RelocateFiles.Add(new RelocateFile(databaseLogFileName, logFileLocation));
                myRestore.ReplaceDatabase = true;
                myRestore.PercentCompleteNotification = 10;
                myRestore.PercentComplete +=
                    myRestore_PercentComplete;
                myRestore.Complete += myRestore_Complete;
                myRestore.SqlRestore(myServer);
                cnn.Close();
            }

            catch (Exception ex)
            {
                if (ex.Message.IndexOf("failed for Server") != -1)
                {
                    RaiseCreatedErrorEventHander("Không thể tạo được cơ sở dữ liệu.\nChi Tiết:\n\tThư mục tạo cơ sở dữ liệu đã được bảo vệ, vui lòng chọn thư mục khác.");
                }
                else
                {
                    RaiseCreatedErrorEventHander("Không thể tạo được cơ sở dữ liệu.\nChi Tiết:\n\t" + ex.Message);
                }

            }
        }
Exemple #19
0
        private void RestoreDb()
        {
            string[] dbNameFragments = _backupFileName.Split('_');
            string   _dbName         = dbNameFragments[0].Replace(_scratchPad, "");

            Restore dbRestore = new Restore();

            dbRestore.Database        = _dbName;
            dbRestore.Action          = RestoreActionType.Database;
            dbRestore.ReplaceDatabase = true;

            try
            {
                BackupDeviceItem device = new BackupDeviceItem(_backupFileName, DeviceType.File);
                dbRestore.Devices.Add(device);
                DataTable dtFiles             = dbRestore.ReadFileList(_sqlServer);
                string    backupDbLogicalName = dtFiles.Rows[0]["LogicalName"].ToString();

                RelocateFile dbRf  = new RelocateFile(backupDbLogicalName, _databaseFileName);
                RelocateFile logRf = new RelocateFile($"{backupDbLogicalName}_log", _databaseLogFileName);
                dbRestore.RelocateFiles.Add(dbRf);
                dbRestore.RelocateFiles.Add(logRf);

                if (!logRf.PhysicalFileName.Contains(@"C:\"))
                {
                    logRf.PhysicalFileName = _DbFileLocation + _databaseLogFileName;
                }

                Logger.LogMessage("Physical Log File: " + logRf.PhysicalFileName);
                Logger.LogMessage("Physical DB File: " + dbRf.PhysicalFileName);


                string           sql        = string.Empty;
                StringCollection scriptColl = dbRestore.Script(_sqlServer);
                foreach (string str in scriptColl)
                {
                    sql += str;
                }

                sql  = "USE master ALTER DATABASE " + _dbName + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE " + sql;
                sql += " ALTER DATABASE " + _dbName + " SET MULTI_USER ";

                txtRestoreScript.Text = sql;
                Logger.LogMessage("SQL Restore Script: " + sql);
                progBar.Visible = true;
                progBar.Value   = 0;

                dbRestore.Complete        += new ServerMessageEventHandler(dbRestore_Complete);
                dbRestore.PercentComplete += new PercentCompleteEventHandler(PercentComplete);
                dbRestore.SqlRestore(_sqlServer);
            }
            catch (Exception exc)
            {
                dbRestore.Abort();
                Logger.LogMessage($"RestoreDb(): Exception occured.\nMessage: {exc.Message}");
                MessageBox.Show("RestoreDb(): Exception occured.\nMessage:" + exc.Message, _messageBoxCaption);
                ;
            }
            finally
            {
                if (File.Exists(_backupFileName))
                {
                    File.Delete(_backupFileName);
                }
            }

            progBar.Visible = false;
        }
Exemple #20
0
        public bool RestoreDB(string string_3, string string_4, string string_5, ProgressBar progressBar_1)
        {
            int  i;
            bool flag;

            this.progressBar_0 = progressBar_1;
            string    columnString   = "";
            string    str            = "";
            string    str1           = "";
            string    str2           = "";
            SQLServer sQLServerClass = new SQLServer();

            try
            {
                try
                {
                    sQLServerClass.Connect(this.ServerName, this.UserName, this.Password);
                    QueryResults queryResult = sQLServerClass.EnumProcesses(-1);
                    int          num         = -1;
                    int          num1        = -1;
                    for (i = 1; i <= queryResult.Columns; i++)
                    {
                        string columnName = queryResult.ColumnName[i];
                        if (columnName.ToUpper().Trim() == "SPID")
                        {
                            num = i;
                        }
                        else if (columnName.ToUpper().Trim() == "DBNAME")
                        {
                            num1 = i;
                        }
                        if ((num == -1 ? false : num1 != -1))
                        {
                            break;
                        }
                    }
                    for (i = 1; i <= queryResult.Rows; i++)
                    {
                        int columnLong = queryResult.GetColumnLong(i, num);
                        if (queryResult.GetColumnString(i, num1).ToUpper() == string_3.ToUpper())
                        {
                            sQLServerClass.KillProcess(columnLong);
                        }
                    }
                    Restore restoreClass = new Restore()
                    {
                        Action = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database
                    };
                    restoreClass.PercentComplete += new RestoreSink_PercentCompleteEventHandler(this.Step);
                    restoreClass.Files            = string_4;
                    restoreClass.Database         = string_3;
                    restoreClass.RelocateFiles    = "[SuperOA],[D:\\aaaa.mdf]";
                    columnString = restoreClass.ReadFileList(sQLServerClass).GetColumnString(1, 1);
                    str          = restoreClass.ReadFileList(sQLServerClass).GetColumnString(2, 1);
                    str1         = string.Concat(string_5, columnString, ".mdf");
                    str2         = string.Concat(string_5, str, ".ldf");
                    string[] strArrays = new string[] { "[", columnString, "],[", str1, "],[", str, "],[", str2, "]" };
                    restoreClass.RelocateFiles   = string.Concat(strArrays);
                    restoreClass.ReplaceDatabase = true;
                    restoreClass.SQLRestore(sQLServerClass);
                    flag = true;
                }
                catch (Exception exception)
                {
                    exception.Message.ToString();
                    MessageBox.Show("恢复数据库失败,请关闭所有和该数据库连接的程序!");
                    flag = false;
                }
            }
            finally
            {
                sQLServerClass.DisConnect();
            }
            return(flag);
        }
Exemple #21
0
        public void Restore(string backupFile, string DatabaseName)
        {
            Microsoft.SqlServer.Management.Common.ServerConnection connection;

            Console.WriteLine(string.Format("Connecting to SQL server {0}", Server));

            // Initialize our common objects
            connection = new Microsoft.SqlServer.Management.Common.ServerConnection(Server);
            smoServer  = new Server(connection);
            database   = smoServer.Databases[DatabaseName];
            if (false && database == null)
            {
                // Invalid database name.
                Console.WriteLine(string.Format("Invalid database '{1}' on server '{0}'.", Server, DatabaseName));
                foreach (Database db in smoServer.Databases)
                {
                    Console.WriteLine(string.Format("Available database: '{1}' on server '{0}'.", Server, db.Name));
                }
                throw new Exception(string.Format("Invalid database '{1}' on server '{0}'.", Server, DatabaseName));
            }


            Restore restore = new Restore();

            restore.Action   = RestoreActionType.Database;
            restore.Database = DatabaseName;

            restore.Devices.AddDevice(backupFile, DeviceType.File);

            restore.ReplaceDatabase = true;

            RelocateFile DataFile = new RelocateFile();
            var          fileList = restore.ReadFileList(smoServer);
            string       MDF      = fileList.Rows[0][1].ToString();

            DataFile.LogicalFileName  = restore.ReadFileList(smoServer).Rows[0][0].ToString();
            DataFile.PhysicalFileName = smoServer.Databases[DatabaseName].FileGroups[0].Files[0].FileName;

            RelocateFile LogFile = new RelocateFile();
            string       LDF     = restore.ReadFileList(smoServer).Rows[1][1].ToString();

            LogFile.LogicalFileName  = restore.ReadFileList(smoServer).Rows[1][0].ToString();
            LogFile.PhysicalFileName = smoServer.Databases[DatabaseName].LogFiles[0].FileName;

            restore.RelocateFiles.Add(DataFile);
            restore.RelocateFiles.Add(LogFile);

            // Kill all connections on the database.
            if (database != null)
            {
                Console.WriteLine(string.Format("Deleting database {0}.", DatabaseName));
                smoServer.KillDatabase(DatabaseName);
                //context.TrackBuildMessage("Killing all processes");
                //smoServer.KillAllProcesses(database.Name);
                //context.TrackBuildMessage("Setting single-user mode");
                //database.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
                //database.Alter(TerminationClause.RollbackTransactionsImmediately);

                //context.TrackBuildMessage("Detatching database");
                //smoServer.DetachDatabase(DatabaseName.Get(context), false);
            }

            // Set some status update event handlers.
            restore.PercentCompleteNotification = 10; // Send updates every 10%
            restore.PercentComplete            += new PercentCompleteEventHandler(RestoreProgressEventHandler);

            Console.WriteLine("Restoring");
            restore.SqlRestore(smoServer);
        }
        public void RestoreDataBase(string backupFilePath, string destinationDatabaseName, string databaseFolder, string databaseFileName, string databaseLogFileName)
        {
            try
            {
                Server srv = GetServer();
                Restore restore = new Restore { Database = destinationDatabaseName, Action = RestoreActionType.Database };
                Database database = srv.Databases[destinationDatabaseName];

                if (database != null)
                {
                    srv.KillAllProcesses(destinationDatabaseName);
                    string primaryFilePath = database.PrimaryFilePath;
                    if (backupFilePath != null) restore.Devices.AddDevice(backupFilePath, DeviceType.File);
                    DataTable datosbackup = restore.ReadFileList(srv);
                    restore.ReplaceDatabase = true;

                    //restore.NoRecovery = true;

                    string physicalFileName = String.Format(@"{0}\{1}.mdf", primaryFilePath, destinationDatabaseName);
                    string str3 = String.Format(@"{0}\{1}_log.ldf", primaryFilePath, destinationDatabaseName);
                    restore.RelocateFiles.Add(new RelocateFile(datosbackup.Rows[0][0].ToString(), physicalFileName));
                    restore.RelocateFiles.Add(new RelocateFile(datosbackup.Rows[1][0].ToString(), str3));
                }

                //restore.ReplaceDatabase = true;
                restore.PercentCompleteNotification = 5;
                restore.PercentComplete += Progreso_PercentComplete;
                restore.Complete += Progreso_Complete;
                restore.SqlRestore(srv);
                srv.Databases[destinationDatabaseName].SetOnline();
                srv.Databases[destinationDatabaseName].Refresh();

            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #23
0
        private void RS()
        {
            Restore sqlRestore = new Restore();

            BackupDeviceItem deviceItem = new BackupDeviceItem(@"D:\Bakup\Weedon.bak", DeviceType.File);
            sqlRestore.Devices.Add(deviceItem);
            sqlRestore.Database = "Weedon";

            ServerConnection connection = new ServerConnection(@".\SQLEXPRESS");

            Server sqlServer = new Server(connection);

            Database db = sqlServer.Databases["Weedon"];
            sqlRestore.Action = RestoreActionType.Database;
            String dataFileLocation = @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Weedon.mdf";
            String logFileLocation = @"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Weedon_Log.ldf";
            db = sqlServer.Databases["Weedon"];
            RelocateFile rf = new RelocateFile("Weedon", dataFileLocation);

            //sqlRestore.RelocateFiles.Add(new RelocateFile("Weedon", dataFileLocation));
            //sqlRestore.RelocateFiles.Add(new RelocateFile("Weedon" + "_log", logFileLocation));

            System.Data.DataTable logicalRestoreFiles = sqlRestore.ReadFileList(sqlServer);
            sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), dataFileLocation));
            sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFileLocation));

            sqlRestore.ReplaceDatabase = true;
            //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
            sqlRestore.PercentCompleteNotification = 10;
            //sqlRestore.PercentComplete +=
               //new PercentCompleteEventHandler(sqlRestore_PercentComplete);

            //sqlServer.ConnectionContext.Disconnect();

            sqlRestore.SqlRestore(sqlServer);
            db = sqlServer.Databases["Weedon"];
            db.SetOnline();
            sqlServer.Refresh();
        }
Exemple #24
0
        /// <summary>
        /// Handles the ButtonClick event of the btnOldDatabasePath control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="DevExpress.XtraEditors.Controls.ButtonPressedEventArgs"/> instance containing the event data.</param>

        /// <summary>
        /// Handles the Click event of the btnFinish control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btnFinish_Click(object sender, EventArgs e)
        {
            try
            {
                if (treeView1.Nodes.Count > 0)
                {
                    Cursor = Cursors.WaitCursor;

                    lstCheck.Clear();
                    foreach (TreeNode node in treeView1.Nodes)
                    {
                        GetCheckNode(node);
                    }


                    progressBar1.Visible = true;
                    progressBar1.Minimum = 0;
                    progressBar1.Maximum = lstCheck.Count;
                    int i       = 0;
                    var restore = new Restore
                    {
                        Action             = RestoreActionType.Database,
                        Database           = txtDatabaseName.Text.Trim(),
                        ReplaceDatabase    = true,
                        ContinueAfterError = true
                    };

                    if (!System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath))
                    {
                        XtraMessageBox.Show("Đường dẫn cơ sở dữ liệu mẫu không tồn tại", "Thông báo lỗi",
                                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    var backupDeviceItem =
                        new BackupDeviceItem(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath,
                                             DeviceType.File);
                    restore.Devices.Add(backupDeviceItem);
                    var fileList = restore.ReadFileList(_server);

                    restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[0][0].ToString().Trim(),
                                                               btnDatabasePath.Text + @"\" + txtDatabaseName.Text.Trim() + ".mdf"));
                    restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[1][0].ToString().Trim(),
                                                               btnDatabasePath.Text + @"\" + txtDatabaseName.Text.Trim() + "_log.ldf"));

                    restore.SqlRestore(_server);
                    var database = _server.Databases[txtDatabaseName.Text.Trim()];
                    if (database != null)
                    {
                        database.SetOnline();
                    }



                    //update options
                    var message = _dbOptionsPresenter.Save();
                    if (message != null)
                    {
                        XtraMessageBox.Show(message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        progressBar1.Value = i;
                    }

                    //set connect string cho khởi tạo db mới hoặc db đang sử dụng


                    //xu ly password
                    var password = RegistryHelperTransform.GetValueByRegistryKey("Password");
                    if (!string.IsNullOrEmpty(password))
                    {
                        password = Crypto.Decrypting(password, "@bgt1me");
                    }
                    if (isNewDB)
                    {
                        //add new connection string
                        var dataProvider = ConfigurationManager.AppSettings.Get("ConnectionStringName");
                        var appConfig    =
                            ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                        var connectionString = string.Format(
                            "Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}",
                            RegistryHelper.GetValueByRegistryKey("InstanceName"),
                            txtDatabaseName.Text.Trim(),
                            RegistryHelper.GetValueByRegistryKey("UserName"),
                            password);
                        if (appConfig.ConnectionStrings.ConnectionStrings[dataProvider] == null) //AnhNT: Thêm điều kiện check nếu chưa tồn tại connection thì mới add
                        {
                            appConfig.ConnectionStrings.ConnectionStrings.Add(
                                new ConnectionStringSettings(dataProvider, connectionString));
                        }
                        else//Nếu tồn tại thì modify
                        {
                            appConfig.ConnectionStrings.ConnectionStrings[dataProvider].ConnectionString =
                                connectionString;
                        }
                        appConfig.Save(ConfigurationSaveMode.Full);
                        ConfigurationManager.RefreshSection("connectionStrings");
                    }



                    //chuyển đổi dữ liệu
                    string connectString = BuildConnectionString(cbSelectServer.Text, cboSelectSourceDB.Text);
                    foreach (var check in lstCheck)
                    {
                        var result = model.ConvertDB(connectString, check.Name.Substring(4));

                        if (result == null)
                        {
                            i = i + 1;
                            progressBar1.Value = i;
                            _result            = true;
                        }
                        else
                        {
                            _result = false;

                            XtraMessageBox.Show(check.Text + ":" + result, "Thông báo ",
                                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }

                if (_result == false)
                {
                    var databaseForDelete =
                        GlobalVariable.Server.Databases[txtDatabaseName.Text.Trim()];

                    databaseForDelete.Drop();
                }
                else
                {
                    DialogResult dialogResult = new DialogResult();
                    if (isNewDB)
                    {
                        dialogResult = XtraMessageBox.Show(
                            "Chuyển đổi cơ sở dữ liệu thành công!Bạn có muốn sử dụng cơ sở dữ liệu đã chuyển đổi",
                            "Thông báo ",
                            MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        Cursor = Cursors.Default;
                    }
                    else
                    {
                        dialogResult = XtraMessageBox.Show(
                            "Chuyển đổi cơ sở dữ liệu thành công!",
                            "Thông báo ",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Cursor = Cursors.Default;
                    }
                    if (dialogResult == DialogResult.Yes)
                    {
                        ////update registry
                        RegistryHelperTransform.RemoveConnectionString();
                        RegistryHelperTransform.SetValueForRegistry("DatabaseName", txtDatabaseName.Text);
                        var dbPathLenght = btnDatabasePath.Text.LastIndexOf(@"\", StringComparison.Ordinal);
                        var dbPath       = btnDatabasePath.Text;
                        if (dbPathLenght == -1)
                        {
                            dbPath = dbPath + @"\";
                        }
                        RegistryHelperTransform.SetValueForRegistry("DatabasePath", dbPath);
                        RegistryHelperTransform.SaveConfigFile();
                        System.Windows.Forms.Application.Restart();
                    }
                    else
                    {
                        if (isNewDB)
                        {
                            var dataProvider = ConfigurationManager.AppSettings.Get("ConnectionStringName");
                            var appConfig    =
                                ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                            //xu ly password
                            var password = RegistryHelperTransform.GetValueByRegistryKey("Password");
                            if (!string.IsNullOrEmpty(password))
                            {
                                password = Crypto.Decrypting(password, "@bgt1me");
                            }
                            var connectionString = string.Format(
                                "Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}",
                                RegistryHelperTransform.GetValueByRegistryKey("InstanceName"),
                                RegistryHelperTransform.GetValueByRegistryKey("DatabaseName"),
                                RegistryHelperTransform.GetValueByRegistryKey("UserName"),
                                password);
                            appConfig.ConnectionStrings.ConnectionStrings[dataProvider].ConnectionString =
                                connectionString;
                            appConfig.Save(ConfigurationSaveMode.Full);
                            ConfigurationManager.RefreshSection("connectionStrings");
                        }
                        Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Cursor = Cursors.Default;
                XtraMessageBox.Show(ex.ToString(),
                                    "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// Handles the Click event of the btnFinish control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btnFinish_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;
                var restore = new Restore
                {
                    Action             = RestoreActionType.Database,
                    Database           = txtDatabaseName.Text.Trim(),
                    ReplaceDatabase    = true,
                    ContinueAfterError = true
                };

                if (!System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath))
                {
                    XtraMessageBox.Show(ResourceHelper.GetResourceValueByName("ResDatabaseTempNotExist"), ResourceHelper.GetResourceValueByName("ResExceptionCaption"),
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                var backupDeviceItem = new BackupDeviceItem(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath, DeviceType.File);
                restore.Devices.Add(backupDeviceItem);
                var    fileList      = restore.ReadFileList(_server);
                string PathBackUp    = btnDatabasePath.Text;
                string ExportXmlPath = "";
                if (!Directory.Exists(PathBackUp))
                {
                    string BPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
                    PathBackUp    = Path.Combine(BPath, "BACKUP");
                    ExportXmlPath = Path.Combine(BPath, "EXPORTXML");
                    System.IO.Directory.CreateDirectory(PathBackUp);
                    System.IO.Directory.CreateDirectory(ExportXmlPath);
                    DBOptions.Add(new DBOptionModel {
                        OptionId = "PathBackup", OptionValue = PathBackUp, ValueType = 0, Description = "Thư mục sao lưu", IsSystem = false
                    });
                    DBOptions.Add(new DBOptionModel {
                        OptionId = "PathXML", OptionValue = ExportXmlPath, ValueType = 0, Description = "", IsSystem = false
                    });
                }
                restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[0][0].ToString().Trim(), PathBackUp + @"\" + txtDatabaseName.Text.Trim() + ".mdf"));
                restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[1][0].ToString().Trim(), PathBackUp + @"\" + txtDatabaseName.Text.Trim() + "_log.ldf"));

                restore.SqlRestore(_server);
                var database = _server.Databases[txtDatabaseName.Text.Trim()];
                if (database != null)
                {
                    database.SetOnline();
                }

                ////LinhMC change logicalName, ThangNK comment lại khi chuyển sang tư vấn nó ko lỗi
                //if (_server != null)
                //{
                //    var databaseName = txtDatabaseName.Text.Trim();
                //    string strCommand = "ALTER DATABASE " + databaseName + " MODIFY FILE (NAME = aBigTime, NEWNAME = " +
                //                        databaseName + "); ALTER DATABASE " + databaseName +
                //                        " MODIFY FILE (NAME = aBigTime_log, NEWNAME = " + databaseName + "_log);";

                //    _server.ConnectionContext.ExecuteNonQuery(strCommand);
                //}

                //update registry
                RegistryHelper.RemoveConnectionString();
                RegistryHelper.SetValueForRegistry("DatabaseName", txtDatabaseName.Text);
                var dbPathLenght = PathBackUp.LastIndexOf(@"\", StringComparison.Ordinal);
                var dbPath       = PathBackUp;
                if (dbPathLenght == -1)
                {
                    dbPath = dbPath + @"\";
                }
                RegistryHelper.SetValueForRegistry("DatabasePath", dbPath);
                RegistryHelper.SaveConfigFile();

                //update options
                var message = _dbOptionsPresenter.Save();
                if (message != null)
                {
                    XtraMessageBox.Show(message, ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    //update currency
                    //_currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyAccounting.EditValue.ToString());
                    //if (CurrencyId != 0)
                    //{
                    //    IsActive = true;
                    //    _currencyPresenter.Save();
                    //}
                    //_currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyLocal.EditValue.ToString());
                    //if (CurrencyId != 0)
                    //{
                    //    IsActive = true;
                    //    _currencyPresenter.Save();
                    //}
                    //_currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyCodeOfSalary.EditValue.ToString());
                    //if (CurrencyId != 0)
                    //{
                    //    IsActive = true;
                    //    _currencyPresenter.Save();
                    //}
                    XtraMessageBox.Show(ResourceHelper.GetResourceValueByName("ResCreateDBSucces"),
                                        ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK,
                                        MessageBoxIcon.Information);
                }

                ////update account
                //_accountPresenter.DisplayByAccountCode("11122");
                //CurrencyCode = cboCurrencyLocal.EditValue.ToString().Trim();
                //_accountPresenter.Save();

                //_accountPresenter.DisplayByAccountCode("11222");
                //CurrencyCode = cboCurrencyLocal.EditValue.ToString().Trim();
                //_accountPresenter.Save();

                Cursor = Cursors.Default;
                System.Windows.Forms.Application.Restart();
            }
            catch (Exception ex)
            {
                Cursor = Cursors.Default;
                XtraMessageBox.Show(ex.ToString(),
                                    ResourceHelper.GetResourceValueByName("ResExceptionCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Exemple #26
0
        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
                if (String.IsNullOrEmpty(txtPath.Text))
                {
                    MessageBox.Show("No File Selected");
                    return;
                }
                else if (!File.Exists(txtPath.Text))
                {
                    MessageBox.Show("File Not Found");
                    return;
                }
                if (String.IsNullOrEmpty(txtDatabaseName.Text))
                {
                    MessageBox.Show("No Database Name Entered");
                    return;
                }
                string path = txtPath.Text;
                string name = txtDatabaseName.Text;

                Restore sqlRestore = new Restore {
                    Database = name
                };
                Server sqlServer = GetServer();

                if (sqlServer.Databases[name] != null)
                {
                    if (
                        MessageBox.Show("Delete existing database?", "Confirm Delete", MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        sqlServer.KillDatabase(name);
                    }
                    else
                    {
                        return;
                    }
                }

                Database db = new Database(sqlServer, name);
                db.Create();

                BackupDeviceItem backupDevice = new BackupDeviceItem(path, DeviceType.File);


                sqlRestore.Action = RestoreActionType.Database;
                sqlRestore.Devices.Add(backupDevice);

                var table = sqlRestore.ReadBackupHeader(sqlServer);

                var fileNumber = sqlRestore.FileNumber;
                foreach (DataRow r in table.Rows)
                {
                    var tempNum = -1;
                    if (!int.TryParse(r["Position"].ToString(), out tempNum))
                    {
                        continue;
                    }
                    if (tempNum > fileNumber)
                    {
                        fileNumber = tempNum;
                    }
                }
                sqlRestore.FileNumber = fileNumber;

                String dataFileLocation = db.FileGroups[0].Files[0].FileName;
                String logFileLocation  = db.LogFiles[0].FileName;
                db = sqlServer.Databases[name];
                sqlServer.ConnectionContext.Disconnect();

                RelocateFile rf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[0]["LogicalName"].ToString(), dataFileLocation);
                RelocateFile lf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[1]["LogicalName"].ToString(), logFileLocation);

                sqlRestore.RelocateFiles.Add(rf);
                sqlRestore.RelocateFiles.Add(lf);


                sqlRestore.ReplaceDatabase             = true;
                sqlRestore.PercentCompleteNotification = 1;
                sqlRestore.PercentComplete            += new PercentCompleteEventHandler(PercentCompleteHandler);
                //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[name];
                db.SetOnline();
                sqlServer.Refresh();
                MessageBox.Show("Restore Completed");
                progressBar.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #27
0
        private void RestoreBackup(string path, string restore_name, RestoreOption restoreOption)
        {
            try
            {
                _restoreOption = restoreOption;
                InitConnexion();
                if (!_smoServer.Databases.Contains(restore_name))
                {
                    var database = new Database(_smoServer, restore_name);
                    database.Create();
                }
                Logger.Success("SQL connected");
                _targetDatabase = _smoServer.Databases[restore_name];
                _targetDatabase.RecoveryModel = RecoveryModel.Simple;
                _targetDatabase.Alter(TerminationClause.RollbackTransactionsImmediately);

                Restore restore = new Restore();

                var backupDeviceItem = new BackupDeviceItem(path, DeviceType.File);
                restore.Devices.Add(backupDeviceItem);
                restore.Database        = restore_name;
                restore.ReplaceDatabase = true;
                restore.NoRecovery      = false;

                if (_mode == RestoreMode.AtTime)
                {
                    restore.NoRecovery = true;
                }

                var fileList = restore.ReadFileList(_smoServer);

                var dataFile = new RelocateFile();
                dataFile.LogicalFileName  = fileList.Rows[0][0].ToString();
                dataFile.PhysicalFileName = _smoServer.Databases[restore_name].FileGroups[0].Files[0].FileName;

                var logFile = new RelocateFile();
                logFile.LogicalFileName  = fileList.Rows[1][0].ToString();
                logFile.PhysicalFileName = _smoServer.Databases[restore_name].LogFiles[0].FileName;

                restore.RelocateFiles.Add(dataFile);
                restore.RelocateFiles.Add(logFile);

                _smoServer.KillAllProcesses(restore_name);

                restore.PercentComplete += Restore_PercentComplete;
                restore.SqlRestoreAsync(_smoServer);
                restore.Information += Restore_Information;
                restore.Wait();
                Restore_Complete();
            }
            catch (SmoException ex)
            {
                Logger.Error("SMO Message : " + ex.Message);
                Logger.Error("SMO Exception : " + ex.InnerException);
            }
            catch (IOException ex)
            {
                Logger.Error("IO Message : " + ex.Message);
                Logger.Error("IO Exception : " + ex.InnerException);
            }
            catch (Exception ex)
            {
                Logger.Error("Message : " + ex.Message);
                Logger.Error("Exception : " + ex.InnerException);
            }
        }
Exemple #28
0
        internal bool RestoreDatabase(string databaseRestoreName, string BackupFilename, EventHandler handler)
        {
            UpdateCallback = handler;
            Db             = InitServer(databaseRestoreName);
            Error          = "";
            try
            {
                var rs = new Restore
                {
                    NoRecovery = false,
                };
                rs.PercentComplete += CompletionStatusInPercent;

                var bdi = new BackupDeviceItem(BackupFilename, DeviceType.File);

                rs.Devices.Add(bdi);
                rs.ReplaceDatabase = true;
                rs.Database        = databaseRestoreName;
                rs.Action          = RestoreActionType.Database;

                var fileList = new DataTable();
                try
                {
                    fileList = rs.ReadFileList(server);
                }
                catch (Exception tex)
                {
                    Error = $"{ tex.Message}";
                }
                string dataLogicalName = fileList.Rows[0][0].ToString();
                // string dataPhysicalName = fileList.Rows[0][1].ToString();
                string logLogicalName = fileList.Rows[1][0].ToString();
                // string logPhysicalName = fileList.Rows[1][1].ToString();

                var path     = server.MasterDBPath;
                var DataFile = new RelocateFile
                {
                    LogicalFileName  = dataLogicalName,
                    PhysicalFileName = Path.Combine(path, databaseRestoreName) + ".mdf"
                };

                var LogFile = new RelocateFile()
                {
                    LogicalFileName  = logLogicalName,
                    PhysicalFileName = Path.Combine(path, databaseRestoreName) + "_log.ldf"
                };

                rs.RelocateFiles.Clear();
                rs.RelocateFiles.Add(DataFile);
                rs.RelocateFiles.Add(LogFile);

                rs.SqlRestore(server);
            }
            catch (Exception ex)
            {
                Error = $"An error ocurred backup up database {databaseRestoreName} -  {ex.Message}";
                return(false);
            }

            return(true);
        }
Exemple #29
0
        private void btnRestore_Click(object sender, EventArgs e)
        {
            try
            {
                if (String.IsNullOrEmpty(txtPath.Text))
                {
                    MessageBox.Show("No File Selected");
                    return;
                }
                else if (!File.Exists(txtPath.Text))
                {
                    MessageBox.Show("File Not Found");
                    return;
                }
                if (String.IsNullOrEmpty(txtDatabaseName.Text))
                {
                    MessageBox.Show("No Database Name Entered");
                    return;
                }
                string path = txtPath.Text;
                string name = txtDatabaseName.Text;

                Restore sqlRestore = new Restore { Database = name };
                Server sqlServer = GetServer();

                if (sqlServer.Databases[name] != null)
                {
                    if (
                        MessageBox.Show("Delete existing database?", "Confirm Delete", MessageBoxButtons.YesNo,
                                        MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        sqlServer.KillDatabase(name);
                    }
                    else
                    {
                        return;
                    }
                }

                Database db = new Database(sqlServer, name);
                db.Create();

                BackupDeviceItem backupDevice = new BackupDeviceItem(path, DeviceType.File);

                sqlRestore.Action = RestoreActionType.Database;
                sqlRestore.Devices.Add(backupDevice);

                var table = sqlRestore.ReadBackupHeader(sqlServer);

                var fileNumber = sqlRestore.FileNumber;
                foreach (DataRow r in table.Rows)
                {
                    var tempNum = -1;
                    if (!int.TryParse(r["Position"].ToString(), out tempNum)) continue;
                    if (tempNum > fileNumber)
                    {
                        fileNumber = tempNum;
                    }
                }
                sqlRestore.FileNumber = fileNumber;

                String dataFileLocation = db.FileGroups[0].Files[0].FileName;
                String logFileLocation = db.LogFiles[0].FileName;
                db = sqlServer.Databases[name];
                sqlServer.ConnectionContext.Disconnect();

                RelocateFile rf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[0]["LogicalName"].ToString(), dataFileLocation);
                RelocateFile lf = new RelocateFile(sqlRestore.ReadFileList(sqlServer).Rows[1]["LogicalName"].ToString(), logFileLocation);

                sqlRestore.RelocateFiles.Add(rf);
                sqlRestore.RelocateFiles.Add(lf);

                sqlRestore.ReplaceDatabase = true;
                sqlRestore.PercentCompleteNotification = 1;
                sqlRestore.PercentComplete += new PercentCompleteEventHandler(PercentCompleteHandler);
                //sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);

                sqlRestore.SqlRestore(sqlServer);

                db = sqlServer.Databases[name];
                db.SetOnline();
                sqlServer.Refresh();
                MessageBox.Show("Restore Completed");
                progressBar.Visible = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #30
0
        public static int RestoreDB(string ConnectionString, string SourceBAKfile, string NewDBname, Registrador.IRegistroEjecucion Logger)
        {
            try {
                ServerConnection oConnection = Connection(ConnectionString);
                Server           oServer     = new Server(oConnection);
                Database         oDataBase   = oServer.Databases[NewDBname];

                if (oDataBase != null)
                {
                    Logger.RegistrarError("ya existe una BD con el nombre '" + NewDBname + "', por lo cual no es posible restaurar la BD y así evitar perdida de información.");
                    return(2);
                }
                else
                {
                    BackupDeviceItem oDevice  = new BackupDeviceItem(SourceBAKfile, DeviceType.File);
                    Restore          oRestore = new Restore();
                    RelocateFile     DataFile = new RelocateFile();
                    RelocateFile     LogFile  = new RelocateFile();
                    string           Path     = oServer.MasterDBPath;

                    oServer.ConnectionContext.StatementTimeout = 6000;

                    oRestore.Devices.Add(oDevice);

                    string LogicFileName_MDF = oRestore.ReadFileList(oServer).Rows[0][0].ToString();
                    DataFile.LogicalFileName  = LogicFileName_MDF;
                    DataFile.PhysicalFileName = Path + "\\" + NewDBname + ".mdf";

                    string LogicFileName_LDF = oRestore.ReadFileList(oServer).Rows[1][0].ToString();
                    LogFile.LogicalFileName  = LogicFileName_LDF;
                    LogFile.PhysicalFileName = Path + "\\" + NewDBname + ".ldf";

                    oRestore.NoRecovery = false;
                    oRestore.RelocateFiles.Add(DataFile);
                    oRestore.RelocateFiles.Add(LogFile);

                    oRestore.Database = NewDBname;



                    Logger.Registrar(DateTime.Now.ToString("HH:mm:ss") + "  Iniciando restauración.");
                    oRestore.SqlRestore(oServer);
                    Logger.Registrar(DateTime.Now.ToString("HH:mm:ss") + "  Finalizando restauración.");

                    oRestore.Devices.Remove(oDevice);


                    oDataBase = oServer.Databases[NewDBname];
                    oDataBase.RecoveryModel = RecoveryModel.Simple;
                    oDataBase.Alter();

                    oConnection.Disconnect();
                }
            } catch (Exception ex) {
                Exception InnerEx     = ex.InnerException;
                string    MoreDetails = InnerEx != null ? Environment.NewLine + "Mas detalles: " + InnerEx.Message:"";

                if (InnerEx != null)
                {
                    MoreDetails += InnerEx.InnerException != null ? Environment.NewLine + InnerEx.InnerException.Message : "";
                }

                Logger.RegistrarError("No fue posible la restaurar la BD con el nombre '" + NewDBname + "' . Detalles: " + Environment.NewLine + ex.Message + MoreDetails);
                DropDB(ConnectionString, NewDBname, Logger);
                return(1);
            }

            return(0);
        }
        /// <summary>
        /// Handles the Click event of the btnFinish control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btnFinish_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;
                var restore = new Restore
                {
                    Action             = RestoreActionType.Database,
                    Database           = txtDatabaseName.Text.Trim(),
                    ReplaceDatabase    = true,
                    ContinueAfterError = true
                };

                if (!System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath))
                {
                    XtraMessageBox.Show(ResourceHelper.GetResourceValueByName("ResDatabaseTempNotExist"), ResourceHelper.GetResourceValueByName("ResExceptionCaption"),
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                var backupDeviceItem = new BackupDeviceItem(AppDomain.CurrentDomain.BaseDirectory + DatabaseTemplatePath, DeviceType.File);
                restore.Devices.Add(backupDeviceItem);
                var fileList = restore.ReadFileList(_server);

                restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[0][0].ToString().Trim(), btnDatabasePath.Text + @"\" + txtDatabaseName.Text.Trim() + ".mdf"));
                restore.RelocateFiles.Add(new RelocateFile(fileList.Rows[1][0].ToString().Trim(), btnDatabasePath.Text + @"\" + txtDatabaseName.Text.Trim() + "_log.ldf"));

                restore.SqlRestore(_server);
                var database = _server.Databases[txtDatabaseName.Text.Trim()];
                if (database != null)
                {
                    database.SetOnline();
                }

                ////LinhMC change logicalName, ThangNK comment lại khi chuyển sang tư vấn nó ko lỗi
                //if (_server != null)
                //{
                //    var databaseName = txtDatabaseName.Text.Trim();
                //    string strCommand = "ALTER DATABASE " + databaseName + " MODIFY FILE (NAME = aBigTime, NEWNAME = " +
                //                        databaseName + "); ALTER DATABASE " + databaseName +
                //                        " MODIFY FILE (NAME = aBigTime_log, NEWNAME = " + databaseName + "_log);";

                //    _server.ConnectionContext.ExecuteNonQuery(strCommand);
                //}

                //update registry
                RegistryHelper.RemoveConnectionString();
                RegistryHelper.SetValueForRegistry("DatabaseName", txtDatabaseName.Text);
                RegistryHelper.SetValueForRegistry("DatabasePath", btnDatabasePath.Text + @"\");
                RegistryHelper.SaveConfigFile();

                //update options
                var message = _dbOptionsPresenter.Save();
                if (message != null)
                {
                    XtraMessageBox.Show(message, ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    //update currency
                    _currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyAccounting.EditValue.ToString());
                    if (CurrencyId != 0)
                    {
                        IsActive = true;
                        _currencyPresenter.Save();
                    }
                    _currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyLocal.EditValue.ToString());
                    if (CurrencyId != 0)
                    {
                        IsActive = true;
                        _currencyPresenter.Save();
                    }
                    _currencyPresenter.DisplayByCurrencyCode(cboCurrencyAccounting.EditValue == null ? null : cboCurrencyCodeOfSalary.EditValue.ToString());
                    if (CurrencyId != 0)
                    {
                        IsActive = true;
                        _currencyPresenter.Save();
                    }
                    XtraMessageBox.Show(ResourceHelper.GetResourceValueByName("ResCreateDBSucces"), ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                //update account
                _accountPresenter.DisplayByAccountCode("11122");
                CurrencyCode = cboCurrencyLocal.EditValue.ToString().Trim();
                _accountPresenter.Save();

                _accountPresenter.DisplayByAccountCode("11222");
                CurrencyCode = cboCurrencyLocal.EditValue.ToString().Trim();
                _accountPresenter.Save();

                //update cac khoan luong
                LoadPayItem();
                if (cboCurrencyCodeOfSalary.EditValue.Equals("USD"))
                {
                    foreach (var payItem in _payItems)
                    {
                        _payItemPresenter.Display(payItem.PayItemId.ToString(CultureInfo.InvariantCulture));
                        CreditAccountCode = "11121";
                        _payItemPresenter.Save();
                    }
                }
                else
                {
                    foreach (var payItem in _payItems)
                    {
                        _payItemPresenter.Display(payItem.PayItemId.ToString(CultureInfo.InvariantCulture));
                        CreditAccountCode = "11122";
                        _payItemPresenter.Save();
                    }
                }

                LoadAutoBusiness();
                if (cboCurrencyLocal.EditValue != null && cboCurrencyAccounting.EditValue != null)
                {
                    var lstAutoBusinessByNotUSD = _autoAutoBusiness.Where(w => w.CurrencyCode != null && w.CurrencyCode != string.Empty && w.CurrencyCode != cboCurrencyAccounting.EditValue.ToString()).ToList();

                    foreach (var autoBusiness in lstAutoBusinessByNotUSD)
                    {
                        _autoBusinessPresenter.Display(autoBusiness.AutoBusinessId.ToString(CultureInfo.InvariantCulture));
                        CurrencyCode = cboCurrencyLocal.EditValue.ToString();
                        _autoBusinessPresenter.Save();
                    }
                }

                Cursor = Cursors.Default;
                System.Windows.Forms.Application.Restart();
            }
            catch (Exception ex)
            {
                Cursor = Cursors.Default;
                XtraMessageBox.Show(ex.ToString(),
                                    ResourceHelper.GetResourceValueByName("ResExceptionCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }