public static void DropDatabaseUser(DatabaseSetupInfo setupInfo) { Action <SqlConnection> dropLoginMethod = (connection) => { using (SqlCommand dropLoginCommand = new SqlCommand("sp_droplogin", connection)) { dropLoginCommand.CommandType = CommandType.StoredProcedure; dropLoginCommand.Parameters.Add("@loginame", SqlDbType.VarChar).Value = setupInfo.EffectiveApplicationAuthenticationInfo.UserName; dropLoginCommand.ExecuteNonQuery(); } }; using (SqlConnection adminConnection = new SqlConnection(setupInfo.CreateConnectionString(true, false))) { adminConnection.Open(); if (!setupInfo.ApplicationAuthenticationSameAsAdmin && !setupInfo.ApplicationAuthenticationInfo.IntegratedSecurity) { if (!setupInfo.IsServerRoleMember("sysadmin", setupInfo.ApplicationAuthenticationInfo.UserName, adminConnection)) { using (SqlCommand selectUsersCommand = new SqlCommand("exec sp_MSloginmappings @User", adminConnection)) { selectUsersCommand.Parameters.Add("@User", SqlDbType.VarChar).Value = setupInfo.ApplicationAuthenticationInfo.UserName; selectUsersCommand.CommandTimeout *= 4; SqlDataAdapter adpt = new SqlDataAdapter(selectUsersCommand); DataTable usersTable = new DataTable(); adpt.Fill(usersTable); if (usersTable.Rows.Count == 0) { dropLoginMethod(adminConnection); } else if (usersTable.Rows.Count == 1 && usersTable.Rows[0]["DBName"].ToString().Equals(setupInfo.DatabaseName, StringComparison.InvariantCultureIgnoreCase)) { using (var adminConnectionWithDB = new SqlConnection(setupInfo.CreateConnectionString(true, true))) { adminConnectionWithDB.Open(); if (!setupInfo.IsDatabaseRoleMember("db_owner", setupInfo.ApplicationAuthenticationInfo.UserName, adminConnectionWithDB)) { using (var dropUserCommand = new SqlCommand(string.Format("DROP USER [{0}]", setupInfo.ApplicationAuthenticationInfo.UserName), adminConnectionWithDB)) { dropUserCommand.ExecuteNonQuery(); } dropLoginMethod(adminConnection); } } } } } } } }