0

您好,我正在使用以下代码在我的程序中恢复数据库。

sqlcmd = New SqlCommand("Restore Database db1 From Disk = '" & txtFileName.Text & "' with replace") sqlcmd.Connection = con sqlcmd.ExecuteNonQuery()

此代码运行良好,但我想根据恢复过程的进度显示进度条。我怎么能这样做?

4

2 回答 2

2

如果您针对 SQL 2005 或更高版本运行此操作,则可以使用以下查询来监控还原操作的状态。

SELECT
    command, start_time, percent_complete,
    CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), '
        + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, '
        + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time,
    CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), '
        + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, '
        + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go,
    dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time, s.text
FROM 
    sys.dm_exec_requests r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE 
    r.command in ('RESTORE DATABASE', 'BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG', 'DBCC TABLE CHECK')

您可以调整 WHERE 子句中的值来控制将返回其状态的操作。

于 2012-07-05T13:00:47.177 回答
0

无法准确知道备份文件的大小。你可以做的是在运行备份命令之前,找出数据库的大小,你可以大致猜测1GB可能需要1秒的备份,并相应地显示进度条

于 2012-07-05T12:22:23.243 回答