[英]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.