/// <summary> /// Restores the database from a backup /// </summary> /// <param name="backupFileName">The name of the backup file</param> public virtual void RestoreDatabase(string backupFileName) { CheckBackupSupported(); using (var currentConnection = new NopDataConnection()) { var commandText = string.Format( "DECLARE @ErrorMessage NVARCHAR(4000)\n" + "ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE\n" + "BEGIN TRY\n" + "RESTORE DATABASE [{0}] FROM DISK = '{1}' WITH REPLACE\n" + "END TRY\n" + "BEGIN CATCH\n" + "SET @ErrorMessage = ERROR_MESSAGE()\n" + "END CATCH\n" + "ALTER DATABASE [{0}] SET MULTI_USER WITH ROLLBACK IMMEDIATE\n" + "IF (@ErrorMessage is not NULL)\n" + "BEGIN\n" + "RAISERROR (@ErrorMessage, 16, 1)\n" + "END", currentConnection.Connection.Database, backupFileName); currentConnection.Execute(commandText); } }
/// <summary> /// Creates a backup of the database /// </summary> public virtual void BackupDatabase(string fileName) { CheckBackupSupported(); //var fileName = _fileProvider.Combine(GetBackupDirectoryPath(), $"database_{DateTime.Now:yyyy-MM-dd-HH-mm-ss}_{CommonHelper.GenerateRandomDigitCode(10)}.{NopCommonDefaults.DbBackupFileExtension}"); using (var currentConnection = new NopDataConnection()) { var commandText = $"BACKUP DATABASE [{currentConnection.Connection.Database}] TO DISK = '{fileName}' WITH FORMAT"; currentConnection.Execute(commandText); } }
/// <summary> /// Execute commands from the SQL script /// </summary> /// <param name="sql">SQL script</param> public void ExecuteSqlScript(string sql) { var sqlCommands = GetCommandsFromScript(sql); using (var currentConnection = new NopDataConnection()) { foreach (var command in sqlCommands) { currentConnection.Execute(command); } } }
/// <summary> /// Set table identity (is supported) /// </summary> /// <typeparam name="T">Entity</typeparam> /// <param name="ident">Identity value</param> public virtual void SetTableIdent <T>(int ident) where T : BaseEntity { using (var currentConnection = new NopDataConnection()) { var currentIdent = GetTableIdent <T>(); if (!currentIdent.HasValue || ident <= currentIdent.Value) { return; } var tableName = currentConnection.GetTable <T>().TableName; currentConnection.Execute($"DBCC CHECKIDENT([{tableName}], RESEED, {ident})"); } }
/// <summary> /// Re-index database tables /// </summary> public virtual void ReIndexTables() { using (var currentConnection = new NopDataConnection()) { var commandText = $@" DECLARE @TableName sysname DECLARE cur_reindex CURSOR FOR SELECT table_name FROM [{currentConnection.Connection.Database}].information_schema.tables WHERE table_type = 'base table' OPEN cur_reindex FETCH NEXT FROM cur_reindex INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN exec('ALTER INDEX ALL ON [' + @TableName + '] REBUILD') FETCH NEXT FROM cur_reindex INTO @TableName END CLOSE cur_reindex DEALLOCATE cur_reindex"; currentConnection.Execute(commandText); } }