private void CreateDatabase(ProvisionedService provisionedService) { string databaseName = provisionedService.Name; string databasePassword = provisionedService.Password; string databaseUser = provisionedService.User; try { DateTime start = DateTime.Now; Logger.Debug(Strings.SqlNodeCreateDatabaseDebugMessage, provisionedService.SerializeToJson()); this.createDBScript = this.ExtractSqlScriptFromTemplate(databaseName); // split script on GO command IEnumerable <string> commandStrings = Regex.Split(this.createDBScript, "^\\s*GO\\s*$", RegexOptions.Multiline); using (TransactionScope ts = new TransactionScope()) { foreach (string commandString in commandStrings) { if (!string.IsNullOrEmpty(commandString.Trim()) && !commandString.Contains("[master]")) { using (SqlCommand cmd = new SqlCommand(commandString, this.connection)) { if (commandString.Contains("CREATE DATABASE")) { cmd.CommandTimeout = 0; } cmd.ExecuteNonQuery(); } } } } this.CreateDatabaseUser(databaseName, databaseUser, databasePassword); long storage = this.StorageForService(provisionedService); if (this.availableStorageBytes < storage) { throw new MSSqlErrorException(MSSqlErrorException.MSSqlDiskFull); } this.availableStorageBytes -= storage; Logger.Debug(Strings.SqlNodeDoneCreatingDBDebugMessage, provisionedService.SerializeToJson(), (start - DateTime.Now).TotalSeconds); } catch (Exception ex) { Logger.Warning(Strings.SqlNodeCouldNotCreateDBWarningMessage, ex.ToString()); throw; } }
/// <summary> /// Provisions an MS Sql Server database. /// </summary> /// <param name="planRequest">The payment plan for the service.</param> /// <param name="credentials">Existing credentials for the service.</param> /// <returns> /// Credentials for the provisioned service. /// </returns> protected override ServiceCredentials Provision(ProvisionedServicePlanType planRequest, ServiceCredentials credentials) { //// todo: chek for plan ProvisionedService provisioned_service = new ProvisionedService(); if (credentials == null) { throw new ArgumentNullException("credentials"); } try { string name = credentials.Name; string user = credentials.User; string password = credentials.Password; provisioned_service.Name = name; provisioned_service.User = user; provisioned_service.Password = password; provisioned_service.Plan = planRequest; this.CreateDatabase(provisioned_service); if (!ProvisionedService.Save()) { Logger.Error(Strings.SqlNodeCannotSaveProvisionedServicesErrorMessage, provisioned_service.SerializeToJson()); throw new MSSqlErrorException(MSSqlErrorException.MSSqlLocalDBError); } ServiceCredentials response = this.GenerateCredential(provisioned_service.Name, provisioned_service.User, provisioned_service.Password); this.provisionServed += 1; return(response); } catch (Exception) { this.DeleteDatabase(provisioned_service); throw; } }