簡體   English   中英

使用ExecuteNonQuery()時無法檢測SQL錯誤

[英]Cannot detect SQL error when using ExecuteNonQuery()

我有以下一些運行SQL語句的代碼:

int rowsEffected = 0;
using (SqlConnection dbConnection = new SqlConnection(dbConnectionString))
{
    try
    {
        dbConnection.InfoMessage += new SqlInfoMessageEventHandler(dbConnection_InfoMessage);
        dbConnection.FireInfoMessageEventOnUserErrors = true;

        dbConnection.Open();


        SqlCommand command = dbConnection.CreateCommand();
        command.CommandTimeout = 0;
        command.CommandText = sqlStatement;

        rowsEffected = command.ExecuteNonQuery();
    }
    catch (Exception e)
    {
        // Handle exception
    }
}

長時間運行的SQL語句可以通過使用具有適當嚴重性值的RAISERROR引發錯誤來報告SqlInfoMessageEventHandler的進度。

將FireInfoMessageEventOnUserErrors設置為true的原因是,如果沒有這個,只有ExecuteNonQuery()返回時,才會立即處理來自SQL語句的所有消息。 將此值設置為true,將在SQL語句引發進度消息時對其進行處理。

正如屬性的名稱所暗示的那樣,事件處理程序還會觸發錯誤,而不僅僅是針對SQL語句的進度反饋保留的特定嚴重性級別。

進度反饋的事件處理程序如下所示:

public void dbConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    if (e.Errors.Count > 0)
    {
        throw new Exception("Something bad happened");
    }

    // Report progress
}

正如您所看到的,我可以檢測到'e'中屬性發生錯誤的時間,但拋出異常並沒有做任何事情。 我希望執行會落入catch塊,但事實並非如此。

如何在ExcecuteNonQuery()方法之后確定發生錯誤?

TIA

我設法找到了解決方法。 我已經向包含事件處理程序的類添加了一個屬性。 如果出現錯誤,我在該類中發送了錯誤標志屬性,然后可以在調用ExcecuteNonQuery()之后讀取該屬性。 如果有錯誤,那么我可以執行清理代碼。 謝謝回復。

使用SqlException類而不是Exception類。 然后查看e.Errors

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM