gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:57 25 4
gpt4 key购买 nike

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

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

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

提前致谢。

== 答案 ==

正如 Ben Thul 的回答所链接的那样,答案是使用 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 中,您可以使用 restore filelistonly from disk='path_to_your_backup'

完成此操作

关于c# - 如何在 C# 中使用 SMO 获取 SQL 数据库备份文件的数据和日志文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com