如何从.NET应用程序中的SQL Server messagePane获取消息

时间:2011-11-28 20:33:13

标签: .net sql-server

我希望在成功或失败的情况下收到消息。所以这两个条件都应该从消息窗格返回一些内容。

这是我尝试使用的代码,但这从不调用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 个答案:

答案 0 :(得分:3)

当你可以打电话给Dr.HasRows时,为时已晚。您需要在较早的时间连接事件处理程序..比如,在打开连接之前。

答案 1 :(得分:0)

确保您在之前启用该事件打开连接或以任何其他方式使用它:

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

    // rest of code follows...

答案 2 :(得分:0)

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