2016-04-13 21 views
1

buna bir özellik ekleyin. Böylece, her bir SqlCommand yürütmesinde, bir istisna atılırsa, onu yakalayabilir, çalıştırılan SQL'i ekleyebilir ve yeniden atabilirim.SQLException uzatın ve ben <code>System.Data.SqlClient.SqlException</code> genişletmek ve buna bir özellik eklemek çalışıyorum

ama sadece yöntemlerle, daha önce uzantıları yaptık. Özellikleri ile çalışmayı başaramıyorum.

public static class SqlExceptionExtention{ 
    public static string query { get; set; } 
} 

ben ekleme ve statik bayrak kaldırarak tüm kombinasyonları denedi ve hiçbir şey çalışır. Tabii ki özellik durağan olamaz, her nesneye özel olmalıdır.

+0

Yalnızca uzatma yöntemleri değil, özellikleri veya alanları ekleyebilirsiniz. Bunu alt sınıflara ayırabilir, 'SqlException'ı yakalayabilir ve yeni istisnayı eklenen sql ile yeniden düzenleyebilirsiniz. – Rob

+0

Uzantıya ihtiyacınız yok. SqlException 'ı, ondan devralan bir özel sınıf oluşturarak genişletmelisiniz. ** Edit ** 'SqlException' mühürlenmiş, bunu yapamazsınız. 'DbException',' SqlException' yapıcısını parametre, sorgu ve anlamlı bir mesaj olarak alan bir sınıfla genişletebilirsiniz. Bunu 'SqlQueryExecutionException' –

+0

C# uzantısı özelliklerini desteklemez sayabilirim - [önerileri tartışılmıştır] rağmen (https://github.com/dotnet/roslyn/issues/112). Bir 'GetQuery()' uzantı yöntemini uygulamakta özgürsünüz, ancak uzantı yöntemleriyle örnek verilerinin izlenmesi çok basit ve karmaşıktır. SqlException 'mühürlü olduğundan, onu da genişletemezsiniz. Bir sarmalayıcı sınıfını tanıtmayı ve 'SqlException'ı bunun' InnerException 'olarak tutmayı düşünün - ya da Sean'ın cevabı uyarınca, her bir özel durumun (güzel yakalama, pardon olan) "Veri" özelliğini kullanın. SqlException' mühürlenir ' –

cevap

4

uzatma özellikleri, sadece uzatma yöntemlerine diye bir şey yoktur. Eğer o zaman sözlüğü doldurmak için Data özelliğini kullanabilirsiniz veri eklemek istiyorsanız

:

try 
{ 
    // Do something 
} 
catch(SqlException e) 
{ 
    e.Data.Add("Foo", "Bar"); 
    throw; 
} 
İlgili konular