2011-11-28 73 views
1

我想在成功或失败的情况下获取消息。所以这两个条件都应该从消息窗格返回一些东西。如何在.NET应用程序中从SQL Server messagePane获取消息

这是我正在尝试使用的代码,但是这永远不会调用conn_InfoMessage。它总是跳过。

using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 
    using (SqlCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = sp.StoredProcedureName; 
     cmd.Parameters.AddRange(parameters.ToArray()); 
     cmd.CommandType = CommandType.StoredProcedure; 

     using (SqlDataReader dr = cmd.ExecuteReader()) 
     { 
      if (dr.HasRows) 
      { 
       conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage); 
       pnlResults.Visible = true; 
       grdResults.DataSource = dr; 
       grdResults.DataBind(); 
      } 
     } 


    lblInfo.Text = myMsg; 

     pnlInfo.CssClass = "ui-state-active"; 
    } 
    conn.Close(); 
} 

static void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
{ 
    myMsg += "/n" + e.Message ; 
} 

回答

3

当你可以打电话给dr.HasRows时,已经太晚了。您需要在更早的时间连接事件处理程序......就在您打开连接之前。

+0

我添加了上面的代码,但仍然没有调用事件处理函数:conn.InfoMessage + = new SqlInfoMessageEventHandler(conn_InfoMessage); conn.FireInfoMessageEventOnUserErrors = true; conn.Open(); – ana

+0

你怎么知道它不叫?您是设置了一个断点,还是没有显示在标签上? –

+0

在错误或警告期间使用断点,我可以看到它调用。但是当没有错误或成功时,它只是绕过代码并转到下一行。我希望它在存储执行成功时工作 – ana

0

确保您启用该事件,然后打开连接或利用它以其他任何方式:

using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage); 
    conn.FireInfoMessageEventOnUserErrors = true; 
    conn.Open(); 

    // rest of code follows... 
+0

我在开始时添加了代码作为说..但仍然没有调用事件处理程序..不知道我缺少什么 – ana

+0

您的查询可能不会在这种情况下提出任何这些事件。 – Yuck

+0

这是执行存储过程。当我执行它时,我可以从sqlserver management studio的消息窗格中看到消息。 – ana

0

尝试将SqlInfoMessageEventHandler委托执行命令之前。我会在Conn.Open方法调用后将它移动到下一行。

相关问题