Ben bir SQL deyimi çalıştırır aşağıdaki kod bit:SQL hata tespit edemez
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
}
}
Uzun koşu SQL ifadeleri ile RAISERROR kullanarak bir hata yükselterek SqlInfoMessageEventHandler yoluyla ilerleme bildirebilirsiniz uygun şiddet değeri.
FireInfoMessageEventOnUserErrors değerini true olarak ayarlama nedenleri, bu olmadan, SQL deyimindeki tüm iletiler yalnızca ExecuteNonQuery() döndürdüğünde bir kerede işlenir. Bu değer true değerine ayarlandığında, ilerleme mesajları SQL ifadesi tarafından yükseltildikçe işlenir.
Mülkün adı önerdiği gibi, olay işleyicisi, yalnızca SQL deyiminin ilerleme geri bildirimi için ayrılan belirli önem düzeyindeki hatalara dayandırmaz. Gördüğünüz gibi bir hata 'e' ama durum atma şey yapmaz içinde özelliğiyle meydana geldiğinde
public void dbConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
if (e.Errors.Count > 0)
{
throw new Exception("Something bad happened");
}
// Report progress
}
, ben algılayabilir:
ilerleme geribildirim için olay işleyicisi şöyle . İnişin yakalama bloğuna düşmesini umuyordum ama bu durum böyle değil.
Bir hata oluştuğunu ExcecuteNonQuery() yönteminden sonra nasıl belirleyebilirim?
TIA
Kodunuzu bir iş parçacığında çalıştırabilir ve bu işlevde thread.abort işlevini çağırabilirsiniz. – SamFisher83
+1: Sadece okuduğum bir şeyi öğrendiğim soruları seviyorum. – NotMe