从VB.NET中的SQL Server过程中仅检索PRINT命令

时间:2015-07-20 18:12:30

标签: sql-server vb.net

如果我在这里遗漏了一些东西,我很抱歉,我还在学习.NET。

我有一个项目,我一直在努力恢复数据库以及事务日志。在每个事务日志之后,我有一个PRINT语句来输出事务日志已被处理。

我一直在使用OnInfoMessage函数从SQL Server中完成的消息中获取消息,但是只想从中提取PRINT命令并将其显示在textbox / label / RichTextBox中一种随时更新的状态框。

我在SQL Server中的过程如下

....
WHILE @@FETCH_STATUS=0
BEGIN
  SET @sql = 'RESTORE LOG FCS FROM DISK = ''C:\Databases\'+@fileName     +'''  WITH NORECOVERY';
EXEC (@sql);
PRINT '===' +@sql;
FETCH NEXT FROM cFile INTO @fileName
END
CLOSE cFile
DEALLOCATE cFile

在VB.net中,我能够将所有消息显示在日志文件中。

Private Shared Sub OnInfoMessage(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlInfoMessageEventArgs)

    Using LogFile As IO.StreamWriter = New IO.StreamWriter("C:\SDBT\worklog.ft", True)

        LogFile.WriteLine(e.Message)

    End Using
End Sub

这反过来给我以下输出......

Processed 10392 pages for database 'FCS', file 'FCS' on file 1.
Processed 2 pages for database 'FCS', file 'FCS_log' on file 1.
RESTORE DATABASE successfully processed 10394 pages in 2.652 seconds  (30.619 MB/sec).
Processed 0 pages for database 'FCS', file 'FCS' on file 1.
Processed 6 pages for database 'FCS', file 'FCS_log' on file 1.
RESTORE LOG successfully processed 6 pages in 0.061 seconds (0.720 MB/sec).
===RESTORE LOG FCS FROM DISK = 'C:\SDBT_TestDB\log_00001.trn'  WITH NORECOVERY
Processed 0 pages for database 'FCS', file 'FCS' on file 1.
Processed 2 pages for database 'FCS', file 'FCS_log' on file 1.
RESTORE LOG successfully processed 2 pages in 0.058 seconds (0.252 MB/sec).
===RESTORE LOG FCS FROM DISK = 'C:\SDBT_TestDB\log_00002.trn'  WITH NORECOVERY

理想情况下,我只想检索前面带有" ==="的行。并将其输出给用户。

是否有可能将@sql变量值从SQL Server获取到VB.net,或者.NET中是否存在我缺少的内容?

提前致谢!

1 个答案:

答案 0 :(得分:2)

OnInfoMessage子广告中,检查e.Message中的每一行文字,看它是否以===开头,只写下这些行。

    For Each line In e.Message.Split(vbNewLine)
        If(line.StartsWith("===")) Then
             LogFile.WriteLine(line)
        End If
    Next