private static void SetConnectionStringNode([NotNull] string name, [NotNull] string sqlPrefix, [NotNull] SqlConnectionStringBuilder defaultConnectionString, [NotNull] Adapters.WebServer.ConnectionString connectionString) { Assert.ArgumentNotNull(name, nameof(name)); Assert.ArgumentNotNull(sqlPrefix, nameof(sqlPrefix)); Assert.ArgumentNotNull(defaultConnectionString, nameof(defaultConnectionString)); Assert.ArgumentNotNull(connectionString, nameof(connectionString)); SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(defaultConnectionString.ConnectionString) { InitialCatalog = connectionString.GenerateDatabaseName(name, sqlPrefix), IntegratedSecurity = false }; connectionString.Value = builder.ToString(); connectionString.SaveChanges(); }
public static void AttachDatabase(string name, string sqlPrefix, bool attachSql, string databasesFolderPath, Adapters.WebServer.ConnectionString connectionString, SqlConnectionStringBuilder defaultConnectionString, IPipelineController controller) { SetConnectionStringNode(name, sqlPrefix, defaultConnectionString, connectionString); if (!attachSql) { return; } var databaseName = connectionString.GenerateDatabaseName(name, sqlPrefix); var databasePath = GetDatabasePath(databasesFolderPath, connectionString, databaseName, ".mdf"); if (!File.Exists(databasePath)) { databasePath = GetDatabasePath(databasesFolderPath, connectionString, databaseName, ".dacpac"); if (!File.Exists(databasePath)) { Log.Warn($"File cannot be found: {databasePath} (.dacpac or .mdf)"); return; } } if (SqlServerManager.Instance.DatabaseExists(databaseName, defaultConnectionString)) { databaseName = ResolveConflict(defaultConnectionString, connectionString, databasePath, databaseName, controller); } if (databaseName != null) { var extension = Path.GetExtension(databasePath); if (extension == ".dacpac") { new SqlAdapter(new SqlConnectionString(defaultConnectionString.ToString())).DeployDatabase(databaseName, new RealFileSystem().ParseFile(databasePath)); var tmpPath = SqlServerManager.Instance.GetDatabaseFileName(databaseName, defaultConnectionString); SqlServerManager.Instance.DetachDatabase(databaseName, defaultConnectionString); extension = ".mdf"; databasePath = Path.Combine(Path.GetDirectoryName(databasePath), Settings.CoreInstallRenameSqlFiles.Value ? databaseName + extension : Path.GetFileNameWithoutExtension(databasePath) + extension); File.Move(tmpPath, databasePath); } SqlServerManager.Instance.AttachDatabase(databaseName, databasePath, defaultConnectionString); } }