2011-11-28 68 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方法調用後將它移動到下一行。

相關問題