J'essaie de restaurer une base de données à partir d'un fichier .BAK
en utilisant C# et SMO. C'est mon code.Comment tuer toutes les connexions à une base de données SQL Server en utilisant C# et SMO?
public static void RestoreDatabase()
{
string dbConnString = Configuration.DatabaseConnectionString;
ServerConnection connection = new ServerConnection(@"dbserver\sqlexpress", "user", "password");
Server smoServer = new Server(connection);
Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "AppDb";
BackupDeviceItem bkpDevice = new BackupDeviceItem(@"TestData\db-backup.bak", DeviceType.File);
rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
// Kill all processes
smoServer.KillAllProcesses(rstDatabase.Database);
// Set single-user mode
Database db = smoServer.Databases[rstDatabase.Database];
db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
db.Alter(TerminationClause.RollbackTransactionsImmediately);
rstDatabase.SqlRestore(smoServer);
}
Cependant, lorsque je tente d'exécuter cette méthode que je reçois le texte suivant (erreur) un message quand il tente de tuer tous les processus:
Ne peut pas utiliser KILL pour tuer votre propre processus.
Je serais très reconnaissant si quelqu'un pouvait aider à résoudre ce problème.
C'est parce qu'il va tuer votre propre processus aussi. Comme votre application est également connectée à SQL Server –
Existe-t-il une solution/solution de contournement pour cela? J'ai essayé de simplement définir la base de données à un seul utilisateur, mais cela n'a pas fonctionné. C'est après cela que j'ai inclus la ligne pour tuer tous les processus. –
Quelle base de données utilisez-vous lors de la connexion? Je pense que c'est AppDB. Changez votre chaîne de connexion pour vous connecter à 'master' à la place. –