我有下面的代碼位,其運行的SQL語句:無法檢測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
你可以在一個線程中運行你的代碼,並在該函數中調用一個thread.abort – SamFisher83 2012-03-15 16:25:56
+1:我喜歡只從閱讀中學到東西的問題。 – NotMe 2012-03-16 17:24:37