2011-01-28 14 views
9

Olası Çoğalt: Ben bazı hata işleme kod üzerinde çalışıyorum
Obtain the Query/CommandText that caused a SQLExceptionC# içinde SqlException neden olan gerçek SQL'i nasıl edinebilirim?

(ELMAH kullanarak) ve varsayılan ayarları sadece hata iletisi gönderir.

if (e.Error.Exception is SqlException) 
{ 
    //if SQL exception try to give some extra information 
    SqlException sqlEx = e.Error.Exception as SqlException; 
    e.Mail.Body = e.Mail.Body + "<div>" + 
           "<h1>SQL EXCEPTION</h1>" + 
           "<b>Message</b>: " + sqlEx.Message + 
           "<br/><b>LineNumber:</b> " + sqlEx.LineNumber + 
           "<br/><b>Source:</b> " + sqlEx.Source + 
           "<br/><b>Procedure:</b> " + sqlEx.Procedure + 
           "</div>"; 
} 

Ve ayrıca göstermeye muktedir istiyorum: Ben bir hata atar gerçek SQL bilmek istiyorum Bu defa ne var

(yani "* thisTableDoesNotExist DAN SEÇME") gerçek SQL. Veritabanı SQL Server 2008 ve SqlException, System.Data.SqlClient.SqlException tipindedir.

cevap

5

Mümkün değil. SQL komutunun yürütüldüğü istisnayı yakalamanız ve komut metninizi kendi özel durumunuza eklemeniz gerekir. Bakınız Obtain the Query/CommandText that caused a SQLException.

+0

Kodun referans verilen yanıtı da içerebilirsiniz. –

+1

Bu sorunun bir kopyasını oluşturmuyor mu? –

1

Kural dışı durumun incelenmesinin en iyi yolu, istisna gerçekleştiğinde kodunuza bir kesme noktası koymak ve istisna nesnesi grafiğinin değerlerini incelemektir.

sqlEx.InnerException.Message 

Başarısız ama böyle çalışma ve tablo adı olarak size daha kesin bilgiler verebilir kesin SQL sağlamayabilir:

İleti böyle InnerException üyesi deneyin. StackTrace üyesinin de bazı bilgileri olabilir.

1

SQL'inizde hata işleme kodunuz olabilir ve bir hatayla karşılaştığında, bir yazdırma veya döndürme ifadesiyle çalıştırmayı denediği SQL'i geri gönderebilir veya bununla birlikte uygulamanıza geri yüklemek isteyebilirsiniz.

+0

Sorunun en iyi çözümü. Diğer cevaplar doğrudur, ancak bu meşru (hacky değil) bir çözümdür. – Crisfole

0

C# tarafı hakkında yeterli bilgi alamıyorsanız, hangi komutların yürütüldüğünü görmek için "SQL profiler" (tam MS SQL'in bir parçası) kullanabilirsiniz.

SQL Profiler Hakkında Bilgiler http://msdn.microsoft.com/en-us/library/ms181091.aspx. Ayrıca altyazı izleme API'sini kullanabilmeniz gerekir - http://msdn.microsoft.com/en-us/library/ms191006.aspx

+0

SQLExceptions, MS-SQL'in yanı sıra başka veri sağlayıcıları tarafından da atılabilir. –