나는이 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로 설정하는 이유는 SQL 문에서 모든 메시지가 ExecuteNonQuery()가 반환 될 때 한꺼번에 처리되기 때문입니다. 이 값을 true로 설정하면 진행 메시지가 SQL 문에 의해 처리 될 때 처리됩니다.
속성의 이름에서 알 수 있듯이 이벤트 핸들러는 SQL 문에 의한 진행 피드백에 대해 예약 된 특정 심각도 수준뿐만 아니라 오류시에도 발생합니다. 당신이 볼 수 있듯이 오류가 'E'만 예외를 던지는 것은 아무것도하지 않는 내에서 속성에 의해 발생하는 경우
public void dbConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
if (e.Errors.Count > 0)
{
throw new Exception("Something bad happened");
}
// Report progress
}
, 나는 감지 할 수 있습니다 :
진행 피드백을위한 이벤트 핸들러는 다음과 같습니다 . 실행이 catch 블록으로 떨어지길 바랬지 만, 그렇지 않습니다.
ExcecuteNonQuery() 메서드 다음에 오류가 발생했는지 어떻게 확인할 수 있습니까?
TIA
스레드에서 코드를 실행하고 그 함수에서 thread.abort를 호출 할 수 있습니다. – SamFisher83
+1 : 나는 그것을 읽는 것으로부터 뭔가를 배울 수있는 질문을 좋아합니다. – NotMe