Jan*_*ich 22 sql-server ado.net
是否可以通过ADO.NET访问SQL Server"副产品消息"?由于缺少单词,"副产品消息"是指Microsoft SQL Server Management Studio的"消息"选项卡中显示的输出.我特别想到的是读取SET STATISTICS TIME ON的输出.看来SqlDataReader在这个问题上没有提供任何东西.
mar*_*c_s 28
是的,这个SqlConnection类上有一个叫做的事件SqlInfoMessage,您可以将其挂钩:
SqlConnection _con =
new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");
_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);
Run Code Online (Sandbox Code Playgroud)
事件处理程序将如下所示:
static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
string myMsg = e.Message;
}
Run Code Online (Sandbox Code Playgroud)
这e.Message是打印到SQL Server Management Studio中的消息窗口的消息.
谢谢楼上的回复。我刚刚做了一个小实验,在从多记录集结果读取消息(在本例中由 SET STATISTICS TIME ON 生成)时发现了一些意外的故障(错误?)。如下所示,即使在最后一个结果集之后也必须调用 NextResult 才能获取最后一条消息。在单个记录集结果的情况下不需要这样做。
using System;
using System.Data.SqlClient;
namespace TimingTest
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("some_conn_str");
conn.Open();
conn.InfoMessage += new SqlInfoMessageEventHandler(Message);
SqlCommand cmd = new SqlCommand("some_sp", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) { };
rdr.NextResult();
while (rdr.Read()) { };
// this is needed to print the second message
rdr.NextResult();
rdr.Close();
conn.Close();
}
static void Message(object sender, SqlInfoMessageEventArgs e)
{
Console.Out.WriteLine(e.Message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4360 次 |
| 最近记录: |