如何在C#中使用SMO获取Sql数据库备份文件的数据和日志文件路径

时间:2013-11-09 05:45:56

标签: c# sql-server database smo database-backups

我在C#中使用Sql SMO程序集找到了几篇关于how to perform a database backup and database restore的帖子。基本上,如果我想制作数据库的副本并给它一个新名称,我需要在执行Restore时提供重定位文件。重定位文件由数据文件路径和日志文件路径组成。如果我从现有数据库恢复,那么我可以简单地检查Database object's FileGroups属性以获取数据文件路径,并使用LogFiles属性获取日志文件路径,然后修改路径的文件名以使用新数据库名称,并在执行还原时提供这些名称。如果不提供重定位文件,则还原操作将覆盖原始数据库(覆盖它的.mdf(数据)和.ldf(日志)文件)。

所以我已经完成了所有工作,但现在我遇到了我想从用户提供的数据库备份文件(.bak)创建新数据库的情况,他们应该能够指定一个数据库的新名称。为了给数据库一个新名称而不是覆盖现有的数据库文件(如果它们已经存在),我需要知道备份文件的数据和日志文件路径。

我是否可以使用SMO函数检查数据库备份文件的数据库名称,数据文件路径和日志文件路径?我假设有,因为SQL Management Studio能够做到这一点,但通过MSDN文档我还没有看到它。

提前致谢。

== ANSWER ==

与Ben Thul的答案相关联,答案是在Restore对象上使用ReadFileList function。以下是一些示例代码:

Restore restore = new Restore();
restore.Devices.AddDevice(Path.GetFullPath(backupFileToRestoreFrom), DeviceType.File);
DataTable fileList = restore.ReadFileList(server);

string dataLogicalName = fileList.Rows[0][0].ToString();
string dataPhysicalName = fileList.Rows[0][1].ToString();
string logLogicalName = fileList.Rows[1][0].ToString();
string logPhysicalName = fileList.Rows[1][1].ToString();

1 个答案:

答案 0 :(得分:3)

检查出来:how to restore using restore class of Microsoft.SqlServer.Management.Smo namespace。在T-SQL中,您可以使用restore filelistonly from disk='path_to_your_backup'

完成此操作