SQL2008DBがあります。そのDBをバックアップするフォームを実行してから、それを更新しようとしています。更新が失敗した場合は、そのバックアップを復元することをお勧めします。これが私がバックアップを復元するために使用しているコードです。
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();
}
問題は、私が選んだファイル名がオンラインDBと異なることのようです。基本的に、サーバー上のデータベースをバックアップに置き換えたいと思います。SqlRestoreを呼び出すと例外が発生します。
主な例外は言う
{"サーバー'localhost'の復元に失敗しました。"}
内部の例外を掘り下げると、これらのエラーが表示されます
Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。
その後
論理ファイル「DB」はデータベース「DB」の一部ではありません。RESTORE FILELISTONLYを使用して、論理ファイル名を一覧表示します。\ r \nRESTOREDATABASEが異常終了しています。
既存のDBをそのまま使用するように指示する方法があると思います。
このコードを使用して、バックアップをダンプするディレクトリを持つDBのファイルパスを取得します。たぶん、これを使用してファイル名を再作成することができます。
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;
}