Comment faire pour get des données de file de sauvegarde de database Sql et des paths de file journal à l'aide de SMO en C #

J'ai trouvé plusieurs messages sur la façon d'effectuer une sauvegarde de la database et la restauration de la database en utilisant les assemblys Sql SMO en C #. Fondamentalement, si je veux faire une copy d'une database et lui donner un nouveau nom, je dois fournir Relocate Files lors de la restauration . Les files de transfert consistent en un path de file de données et un path de file journal. Si je restaure depuis une database existante, je peux simplement inspecter la propriété FileGroups de l' object Database pour get le path du file de données, et sa propriété LogFiles pour get le path du file journal, puis modifier le nom du path pour utiliser le nouveau nom de database fournissez-les lors de la restauration. Sans fournir l'option Relocate Files, l'opération de restauration écrase simplement la database d'origine (remplacez les files .mdf (data) et .ldf (log)).

J'ai tout ce qui fonctionne bien, mais maintenant je suis dans le cas où je veux créer une nouvelle database à partir d'un file de sauvegarde de database (.bak) que l'user fournit, et ils devraient être en mesure de spécifier un nouveau nom. la database. Afin de donner un nouveau nom à la database et de ne pas écraser les files de database existants (s'ils existent déjà), j'ai besoin de connaître les paths de données et de files journaux du file de sauvegarde.

Existe-t-il des fonctions SMO que je peux utiliser pour inspecter un file de sauvegarde de database pour son nom de database, son path de file de données et son path de file journal? Je suppose qu'il existe, car SQL Management Studio est capable de le faire, mais en regardant dans la documentation MSDN je ne l'ai pas encore rencontré.

Merci d'avance.

== RÉPONSE ==

Comme lié dans la réponse de Ben Thul, la réponse est d'utiliser la fonction ReadFileList sur l'object Restore. Voici un exemple de code:

Restore restore = new Restore(); restore.Devices.AddDevice(Path.GetFullPath(backupFileToRestoreFrom), DeviceType.File); DataTable fileList = restore.ReadFileList(server); ssortingng dataLogicalName = fileList.Rows[0][0].ToSsortingng(); ssortingng dataPhysicalName = fileList.Rows[0][1].ToSsortingng(); ssortingng logLogicalName = fileList.Rows[1][0].ToSsortingng(); ssortingng logPhysicalName = fileList.Rows[1][1].ToSsortingng(); 

Vérifiez cela: comment restaurer en utilisant la class de restauration de l'espace de noms Microsoft.SqlServer.Management.Smo . Dans T-SQL, vous pouvez accomplir ceci avec restore filelistonly from disk='path_to_your_backup'