如何使用PowerShell和C#检索每个.bak文件?

时间:2015-06-04 23:49:57

标签: c# sql sql-server tsql powershell

我在C#.NET中开发一个允许用户备份数据库的Windows窗体客户端应用程序。每次进行备份时,SQL Server中的sp都会执行以下逻辑:

DECLARE @File VARCHAR (1000) = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\DBCompany-'
+ (SELECT REPLACE(REPLACE(CONVERT(VARCHAR(500), GETDATE(), 120),':','_'), ' ','_')+ '.bak');

BACKUP DATABASE [DBCompany]
TO DISK = @File
NAME = 'DBCompany';
GO

正如您所看到的.bak文件根据保存的日期和时间获取名称,因此我的目录中有不同的文件,如下所示:

DBCompany-2015-06-04_20_21_08.bak
DBCompany-2014-02-24_19_01_39.bak
DBCompany-2014-01-22_23_30_58.bak
....

我知道恢复.bak文件的语法,但我试图让用户选择其中一个文件并将其恢复,但我无法找到任何方法来检索这些文件文件并向他显示除了使用OpenFileDialog控件(我不想要)之外。

据我研究,可以将PowerSheel集成到我的C#代码中。有人能指出我如何做到这一点的正确方向吗?

2 个答案:

答案 0 :(得分:1)

如果您知道备份文件的物理位置,可以使用System.IO;命名空间。从这个

  1. 获取物理位置中可用的文件列表。
  2. 列出所有文件名并向用户显示文件名。
  3. 一旦用户选择恢复所选备份文件。
  4. 抱歉,这可能是非常冗长的代码,所以我已经给出了描述以达到您的要求。

    谢谢,

答案 1 :(得分:1)

您可以在没有Powershell的情况下通过C#轻松完成此操作。假设应用程序与SQL Express实例在同一个框上运行,下面是一个加载组合框的示例:

    var backupFileList = System.IO.Directory.GetFiles(@"C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\DBCompany", "*.bak");

    foreach(var backupFile in backupFileList)
    {
        this.comboBoxBackupFiles.Items.Add(backupFile);
    };