从bak文件中检索数据库名称

Nig*_*ker 5 .net c# sql-server smo sql-server-2005

我有一个bak文件,其中包含数据库的备份.

我想将此数据库还原到新位置,我需要从此文件中检索数据库名称,任何想法如何操作?

我需要它来覆盖数据文件位置和日志文件位置.

感谢帮助.

Mit*_*eat 11

RESTORE FILELISTONLY
FROM DISK = 'full path to your .bak file'
Run Code Online (Sandbox Code Playgroud)

将显示备份中的当前文件名.如果一个文件中有多个备份而您未指定" WITH FILE = X",则只能获取文件中第一个备份的信息.

RESTORE DATABASE MyNewDBname
    FROM DISK = 'full path to your .bak file'
    WITH 
      MOVE 'LogicalFilename_Data' TO 'D:\somepath\...\MyDB.mdf',
      MOVE 'LogicalFilename_Log' TO 'D:\somepath\...\MyDB.ldf';
GO
Run Code Online (Sandbox Code Playgroud)

SMO的粗略轮廓(未经测试):

Restore restoreDB = new Restore();
restoreDB.Database = myDatabase.Name;
// Specify whether you want to restore database, files or log
restoreDB.Action = RestoreActionType.Database;
restoreDB.Devices.AddDevice(@"D:\somepath\...\MyDBFull.bak", DeviceType.File);

restoreDB.ReplaceDatabase = true; // will overwrite any existing DB     
restoreDB.NoRecovery = true;

// you can Wire up events for progress monitoring */
// restoreDB.PercentComplete += CompletionStatus;
// restoreDB.Complete += RestoreCompleted;

restoreDB.SqlRestore(myServer);
Run Code Online (Sandbox Code Playgroud)

参考.

使用SMO,您可以使用Restore.ReadFileList检索文件列表

另请参阅:如何从C#还原数据库