如果我在这里遗漏了一些东西,我很抱歉,我还在学习.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中是否存在我缺少的内容?
提前致谢!
答案 0 :(得分:2)
在OnInfoMessage
子广告中,检查e.Message
中的每一行文字,看它是否以===
开头,只写下这些行。
For Each line In e.Message.Split(vbNewLine)
If(line.StartsWith("===")) Then
LogFile.WriteLine(line)
End If
Next