So stellen Sie eine Datenbank aus C # wieder her

Ich habe eine SQL 2008-Datenbank. Ich führe ein Formular aus, das diese Datenbank sichert und dann versucht, sie zu aktualisieren. Wenn das Update fehlschlägt, besteht die Idee darin, diese Sicherung wiederherzustellen. Hier ist der Code, mit dem ich die Sicherung wiederherstelle.

public void RestoreDatabase(String databaseName, String backUpFile, String serverName, String userName, String password)
{
    Restore sqlRestore = new Restore();
    BackupDeviceItem deviceItem = new BackupDeviceItem(backUpFile, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    sqlRestore.Action = RestoreActionType.Database;

    string logFile = System.IO.Path.GetDirectoryName(backUpFile);
    logFile = System.IO.Path.Combine(logFile, databaseName + "_Log.ldf");

    string dataFile = System.IO.Path.GetDirectoryName(backUpFile);
    dataFile = System.IO.Path.Combine(dataFile, databaseName + ".mdf");

    Database db = sqlServer.Databases[databaseName];
    RelocateFile rf = new RelocateFile(databaseName, dataFile);
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFile));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFile));
    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}

Das Problem scheint zu sein, dass sich die von mir ausgewählten Dateinamen von der Online-Datenbank unterscheiden. Grundsätzlich möchte ich die Datenbank auf dem Server durch die Sicherung ersetzen. Ich bekomme eine Ausnahme, wenn ich SqlRestore aufrufe.

Die Hauptausnahme besagt

{"Wiederherstellung für Server 'localhost' fehlgeschlagen."}

Das Eingraben in die inneren Ausnahmen zeigt diese Fehler

Beim Ausführen einer Transact-SQL-Anweisung oder eines Stapels ist eine Ausnahme aufgetreten.

und dann

Die logische Datei 'DB' ist nicht Teil der Datenbank 'DB'. Verwenden Sie RESTORE FILELISTONLY, um die logischen Dateinamen aufzulisten. \ R \ nRESTORE DATABASE wird abnormal beendet.

Ich nehme an, es gibt eine Möglichkeit, dies mitzuteilen, indem Sie einfach die vorhandene Datenbank ersetzen, wie sie ist.

Ich benutze dieses Codebit, um den Dateipfad der DB mit einem Verzeichnis zum Sichern abzurufen. Vielleicht könnte dies verwendet werden, um die Dateinamen neu zu erstellen.

public string GetDBFilePath(String databaseName, String userName, String password, String serverName)
{
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    Database db = sqlServer.Databases[databaseName];
    return sqlServer.Databases[databaseName].PrimaryFilePath;
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage