我希望在成功或失败的情况下收到消息。所以这两个条件都应该从消息窗格返回一些内容。
这是我尝试使用的代码,但这从不调用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 ;
}
答案 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
方法调用之后将其移到下一行。