Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用所有备份集使用SMO还原数据库_C#_Sql Server_Database_Restore_Smo - Fatal编程技术网

C# 使用所有备份集使用SMO还原数据库

C# 使用所有备份集使用SMO还原数据库,c#,sql-server,database,restore,smo,C#,Sql Server,Database,Restore,Smo,我的问题很简单。 我有一个.bak文件,其中包含一个或多个备份集 当我使用SMO用这个.bak文件恢复数据库时,只需要第一个备份集就可以完成它的工作。它似乎忽略了剩下的几组 为什么 请参阅我的代码: //Sets the restore configuration Restore restore = new Restore() { Action = RestoreActionType.Data

我的问题很简单。 我有一个.bak文件,其中包含一个或多个备份集

当我使用SMO用这个.bak文件恢复数据库时,只需要第一个备份集就可以完成它的工作。它似乎忽略了剩下的几组

为什么

请参阅我的代码:

            //Sets the restore configuration
            Restore restore = new Restore()
            {
                Action = RestoreActionType.Database,
                Database = _databaseToRestore.DatabaseName,
                ReplaceDatabase = true
            };

            restore.Devices.Add(new BackupDeviceItem(_backupFilePath, DeviceType.File));

            Server server = new Server(_databaseToRestore.ServerName);

            DataTable fileList = restore.ReadFileList(server);
            string serverDataFolder = server.Settings.DefaultFile;

            if (string.IsNullOrEmpty(serverDataFolder))
                serverDataFolder = server.Information.MasterDBPath;

            foreach (DataRow file in fileList.Rows)
            {
                restore.RelocateFiles.Add(
                    new RelocateFile((string)file["LogicalName"],
                    Path.Combine(serverDataFolder, _databaseToRestore.DatabaseName + Path.GetExtension((string)file["PhysicalName"]))));
            }

            //Gets the exclusive access to database
            server.KillAllProcesses(_databaseToRestore.DatabaseName);
            restore.Wait();

            restore.SqlRestore(server);
我以为BackupDeviceItem可以给我一个关于里面有多少备份集的反馈,这样我可以警告用户,但事实并非如此

有人对此有线索吗


谢谢您的时间。

我刚刚发现我可以很容易地知道该文件包含多少备份集

DataTable backupSets = restore.ReadBackupHeader(server);
现在,一个简单的backupSets.Rows.Count可以帮助我警告用户。

好的,修复了我的问题

重要字段是还原对象上的文件号。 默认值为1,这就是为什么总是使用我的第一个备份集

我只需将此属性设置为文件中备份集的数量,现在需要完成最近的备份


注意:此问题与不同的备份无关。

这非常有用,感谢您发布您的发现。我想添加它,告诉它您要读取哪个备份文件的头文件,然后通过restore.Devices.add将其作为设备添加到还原对象中。MSDN的完整示例,