Ejemplo n.º 1
0
        private ServiceResponse CreateDatabase(DatabaseInfo info, string databaseUserNamePublic, string databasePasswordPublic, string scriptResourceName, IEnumerable<string> scriptResourceNames, ScriptLoader scriptLoader, DatabaseCredentials creatorCredentials)
        {
            var creatorInfo = info.CloneWithNewCredentials(creatorCredentials);
            using (var database = new DatabaseManipulator(creatorInfo))
            {
                try
                {
                    smo.Server sqlServer = database.SqlServer;

                    // Make sure SQL Server allows SQL logins if needed
                    if (creatorInfo.HasUserName())
                    {
                        if (database.LoginMode == smo.ServerLoginMode.Integrated)
                        {
                            _logger.Error("Database Server is not configured for mixed-mode authentication.", "Database Server", creatorInfo.ServerName);
                            _response.AddError(string.Format(CultureInfo.InvariantCulture, "Database Server ({0}) is not configured for mixed-mode authentication.", creatorInfo.ServerName));
                        }
                    }

                    if (!_response.HasErrors)
                    {
                        if (!database.Exists())
                        {
                            _logger.Info("Creating database.", "Database name", info.DatabaseName, "Database Server", info.ServerName);

                            // Create new database
                            var newDatabase = new smo.Database(sqlServer, info.DatabaseName);
                            newDatabase.Create();

                            database.CreateLogin(info.UserName, info.Password, true);
                            database.CreateLogin(databaseUserNamePublic, databasePasswordPublic, false);

                            // I don't know why we have to dispose this here, but I was afraid to remove it
                            database.Dispose();

                            UpdateDatabaseSchema(info, databaseUserNamePublic, scriptResourceName, scriptResourceNames, scriptLoader);

                            _logger.Info("Database created successfully.", info.GenerateCustomLoggingProperties());
                        }
                        else
                        {
                            _logger.Error("Database already exists.", info.GenerateCustomLoggingProperties());
                            _response.AddError(string.Format(CultureInfo.InvariantCulture, "Database ({0}) on server ({1}) already exists.", info.DatabaseName, info.ServerName));
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error("Creation of Database failed.", ex, info.GenerateCustomLoggingProperties());
                    _response.AddError(string.Format(CultureInfo.InvariantCulture, "Creation of Database ({0}) on server ({1}) failed: {2}", info.DatabaseName, info.ServerName, ex.Message));
                }
            }

            return _response;
        }
Ejemplo n.º 2
0
        public ServiceResponse DestroyDatabase(DatabaseInfo info, DatabaseCredentials destroyerCredentials, string databaseUserNamePublic)
        {
            var creatorInfo = info.CloneWithNewCredentials(destroyerCredentials);
            using (var database = new DatabaseManipulator(creatorInfo))
            {
                try
                {
                    if (database.Exists())
                    {
                        _logger.Info("Destroying database.", info.GenerateCustomLoggingProperties());

                        database.Destroy();
                        database.RemoveLogin();
                        database.RemoveLogin(databaseUserNamePublic);

                        _logger.Info("Database destroyed successfully.", info.GenerateCustomLoggingProperties());
                    }
                    else
                    {
                        _logger.Info("Database does not exist.", info.GenerateCustomLoggingProperties());
                        _response.AddInfo("Database ({0}) on server ({1}) does not exist.", info.DatabaseName, info.ServerName);
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error("Destruction of database failed.", ex, info.GenerateCustomLoggingProperties());
                    _response.AddError("Destruction of database ({0}) on server ({1}) failed.", info.DatabaseName, info.ServerName);
                }
            }

            return _response;
        }