【问题标题】:Retrieving only PRINT command from SQL Server procedure in VB.NET仅从 VB.NET 中的 SQL Server 过程中检索 PRINT 命令
【发布时间】:2015-07-20 18:12:30
【问题描述】:

如果我在这里遗漏了一些东西,我深表歉意,我仍在学习 .NET。

我有一个项目,我一直在做我正在恢复数据库和事务日志的项目。在每个事务日志之后,我都有一个 PRINT 语句来输出事务日志已被处理。

我一直在使用OnInfoMessage 函数从 SQL Server 中完成的操作中获取消息,但只是希望从中提取 PRINT 命令并将其显示在文本框/标签/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 中的东西?

提前致谢!

【问题讨论】:

    标签: sql-server vb.net


    【解决方案1】:

    在您的OnInfoMessage sub 中,检查e.Message 中的每一行文本,看它是否以=== 开头,并且只写那些行。

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

    【讨论】:

    • 这很好用!现在让它显示在文本框中,因为它一步一步完成,我很高兴!谢谢!
    • 很高兴能帮上忙!如果您觉得对您有用,请随时 accept my answer
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多