/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param> /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param> /// <returns></returns> public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1) { string databaseName; string masterConnectionString; GetMasterConnectionStringBuilder(connectionString, logger, out masterConnectionString, out databaseName); using (var connection = new SqlConnection(masterConnectionString)) { connection.Open(); if (!DatabaseExists(connection, databaseName)) { return; } var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection) { CommandType = CommandType.Text }; using (var command = dropDatabaseCommand) { command.ExecuteNonQuery(); } logger.WriteInformation("Dropped database {0}", databaseName); } }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param> /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param> /// <returns></returns> public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1) { string databaseName; string masterConnectionString; GetMasterConnectionStringBuilder(connectionString, logger, out masterConnectionString, out databaseName); using (var connection = new SqlConnection(masterConnectionString)) { connection.Open(); var databaseExistCommand = new SqlCommand($"SELECT TOP 1 case WHEN dbid IS NOT NULL THEN 1 ELSE 0 end FROM sys.sysdatabases WHERE name = '{databaseName}';", connection) { CommandType = CommandType.Text }; using (var command = databaseExistCommand) { var exists = (int?)command.ExecuteScalar(); if (!exists.HasValue) { return; } } var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection) { CommandType = CommandType.Text }; using (var command = dropDatabaseCommand) { command.ExecuteNonQuery(); } logger.WriteInformation("Dropped database {0}", databaseName); } }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="certificateFile">Client certificate for db.</param> /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param> /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param> /// <returns></returns> public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, string certificateFile, IUpgradeLog logger, int timeout = -1) { GetMasterConnectionStringBuilder(connectionString, logger, out var masterConnectionString, out var databaseName); using (var connection = new NpgsqlConnection(masterConnectionString)) { if (!string.IsNullOrEmpty(certificateFile) && certificateFile.Trim() != string.Empty) { connection.ProvideClientCertificatesCallback += certs => certs.Add(new X509Certificate2(certificateFile)); } connection.Open(); using (var command = new NpgsqlCommand($"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = \'{databaseName}\'; DROP DATABASE IF EXISTS \"{databaseName}\";", connection)) { command.ExecuteNonQuery(); } logger.WriteInformation("Dropped database {0}", databaseName); } }
public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supportedDatabases, string connectionString) { NpgsqlConnectionStringBuilder builder = new NpgsqlConnectionStringBuilder(connectionString); string databaseName = builder.Database; builder.Database = "postgres"; using (NpgsqlConnection connection = new NpgsqlConnection(builder.ToString())) { connection.Open(); using (NpgsqlCommand command = new NpgsqlCommand($"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = \'{databaseName}\'; DROP DATABASE IF EXISTS \"{databaseName}\"", connection)) { command.ExecuteNonQuery(); } connection.Close(); Console.WriteLine("Dropped database {0}", databaseName); } }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param> /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param> /// <returns></returns> public static void SnowflakeDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1) { throw new NotImplementedException(); //GetMasterConnectionStringBuilder(connectionString, logger, out var masterConnectionString, out var databaseName); //using (var connection = new SnowflakeDbConnection()) //{ // connection.ConnectionString = masterConnectionString; // connection.Open(); // if (!DatabaseExists(connection, databaseName)) // return; // var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection) { CommandType = CommandType.Text }; // using (var command = dropDatabaseCommand) // { // command.ExecuteNonQuery(); // } // logger.WriteInformation("Dropped database {0}", databaseName); //} }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="commandTimeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param> /// <returns></returns> public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, int commandTimeout) { SqlDatabase(supported, connectionString, new ConsoleUpgradeLog(), commandTimeout); }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <returns></returns> public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString) { SqlDatabase(supported, connectionString, new ConsoleUpgradeLog()); }
/// <summary> /// Drop the database specified in the connection string. /// </summary> /// <param name="supported">Fluent helper type.</param> /// <param name="connectionString">The connection string.</param> /// <param name="certificateFile">Optional SSL client pfx certificate for db.</param> /// <returns></returns> public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, string certificateFile = null) { PostgresqlDatabase(supported, connectionString, certificateFile, new ConsoleUpgradeLog()); }