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

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

作者:互联网

我发现在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文档时,我还没有发现它.

提前致谢.

==答案==

正如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();

解决方法:

签出这个:how to restore using restore class of Microsoft.SqlServer.Management.Smo namespace.在T-SQL中,您将通过仅从disk =’path_to_your_backup’恢复filelist来完成此任务.

标签:smo,database-backups,c,sql-server,database
来源: https://codeday.me/bug/20191122/2060432.html