【问题标题】:Get the value of print statement of sql server in vb.net by using oledb使用oledb获取vb.net中sql server的print语句的值
【发布时间】:2014-04-10 17:50:41
【问题描述】:

我正在尝试创建一个查询分析器和执行器。

我想知道如何获取像'PRINT'这样的transact-sql语句的输出消息

declare @msg varchar(100)

set @msg =  select [column] from [table name] where [column] = [condition]

if @msg = 'SOMEVALUE'
 begin
   print 'This is first statement'
 end
else
 begin
  print 'This is second statement'
 end

你能帮我在vb.net中得到上面代码的打印语句的值吗

提前致谢

【问题讨论】:

  • 为了将来参考,PRINT 不是将数据返回给调用者的好方法。结果集或 OUTPUT 参数更标准。
  • 我知道 PRINT 并不是将数据返回给调用者的好方法,但我正在为一般用户创建查询分析器,所以我不想限制他们只使用 select to查看输出。

标签: sql sql-server vb.net tsql ado.net


【解决方案1】:

来自MSDN

您可以从 SQL Server 检索警告和信息性消息 使用 SqlConnection 对象的 InfoMessage 事件的数据源。

此处引用的信息性消息包括 print 命令返回的值。

更新:

AddHandler myConnection.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)

Private Sub OnInfoMessage(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlInfoMessageEventArgs)
        mySB.AppendLine(e.Message)
End Sub

myConnection 是您的 SQL 连接,mySB 是您的字符串生成器。

e.Message 的值为print

【讨论】:

  • 效果很好,我只是将 "SqlInfoMessageEventHandler" 更改为 "OleDbInfoMessageEventHandler" 。谢谢
  • 使用它只会在进程结束时给出消息。有没有办法动态获取输出消息?
【解决方案2】:

我仍然建议使用 SELECT。无需输出参数

if @msg = 'SOMEVALUE'
 begin
   select 'This is first statement'
 end
else
 begin
     select 'This is second statement'
 end

这个您可以通过简单的ExecuteScalar 获取您的 VB.NET 代码(如果您决定不使用 OleDB for SQL Server,则可以使用它的 SqlClient 等效代码)。

【讨论】:

  • 我很清楚 select 语句的值可以通过 ExecuteScalar 很容易地检索到,但我的要求是获取 print 语句的值,上面的 MSDN 答案是完美的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多