如何还原SQL Server数据库并以Windows窗体显示进度统计信息?

时间:2015-01-27 04:14:25

标签: .net sql-server vb.net winforms

当我在SSMS中使用T-SQL恢复具有STATS = 10选项的数据库时(如下例所示),我在“消息”窗口中每10%打印一次统计信息。我现在想要自动化恢复过程(将VB.Net WinForm应用程序指向备份和事务文件目录并让它恢复所有数据)并希望在标准Windows窗体进度条中报告进度。

RESTORE DATABASE [Databasename] FILE = N'DatabaseName_dat' FROM  DISK = N'S:\SQL\Backups\DatabaseName.bak' WITH FILE = 1, MOVE N'AuctionData_dat' TO N'C:\SQL\Data\DatabaseName.mdf', MOVE N'DatabaseName_log' TO N'C:\SQL\Logs\DatabaseName.ldf', NOUNLOAD, REPLACE, STATS = 10

我猜我需要使用某种形式的异步命令,并等待服务器的每个响应更新进度条。到目前为止,我所看到的只有ExecuteReaderAsync,ExecuteNonQueryAsync和ExecuteScalarAsync命令 - 在命令完全完成之前,这些命令都不返回任何细节。

这甚至可能来自.Net吗?

感谢您提供任何帮助或提示

2 个答案:

答案 0 :(得分:3)

这本身并不是一个.Net问题。您的问题实际上是"我可以编写SQL脚本来执行还原,然后在还原运行时定期查询其进度吗?"

答案是"是"。在这里查看详细信息:

Is there a SQL script that I can use to determine the progress of a SQL Server backup or restore process?

您必须执行以下操作:

1)启动脚本(您可以手动执行此操作,也可以从WinForms应用程序执行此操作)

2)将会话ID传递给Winforms

3)在winforms应用中添加一个计时器,定期拨打sp_who..SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = ...并显示"%/ done"图形。

答案 1 :(得分:2)

此查询将为您提供会话的完成百分比。您可以执行此查询并获取percent_complete值并使用它来更新进度条

SELECT percent_complete
FROM sys.dm_exec_requests
WHERE session_id=<your restore session id>