Exception hataları - Hata Türleri:

Hata türlerini görmek catch yapısı için işimize yarayacağı için tanımlamalara değinmek istedim.
(Hatalarını kontrol etmek için sizlere hata yakalama DbEntityValidationException  Catch yapısı vereceğim gerçekten çok işinize yarayacak. :)  )

Hata Türleri:
Compile Time Exception (Derleme Hatası): Syntax yapısından dolayı kaynaklanan hatalardır.
yanlış virgül, noktalı virgül hatası , scope ({}) parantez ((,)) , parantez unutulması gibi hatalardan kaynaklanır.

RunTime Exception(Çalışma Zamanı Hatası):
Kullanıcının girmesini beklediğimiz değer dışında değer girmesinden dolayı kaynaklanan hatadır.
mesela string alana int değer girilmesi gibi bu sebeplerden kaynaklanıyor.
bu hataları try- catch- finally alanında görebiliriz. c# ta hataları yakalamak için en fazla kullanılan kod blogudur.

try-catch-fimnally blok: Hata ihtimali bulunan kod satırı try blogunun içine yazılır.Try blogu içerısınde herhangi bir hata meydana gelirse try blogundakı diger kodlar çalıştırılmadan catch blogu içerisine atlanarak buradaki kodlar çalışır.
eğer programda hata meydana gelmezse catch blogu içerisindeki kodlar çalıştırılamaz.
Try ile catch komutları mutlaka birlikte kullanılması gereken bloklardır.
finally blogunun kullanımı ise yazılımcının isteğine bağlıdır.
Birden fazla catch oluşturulabilir.

try{
//hata oluşabilecek kod satırının bulunacağı try blogu
}

catch(FormatException){
//try blogunda hata gerçekleştirilmesi duurmunda
}
catch (Exception){
//
}
finally {
//try yada catch blogundan sonra mutlak çalışacak kod satırının bulunacağı finally blogu
}


Logical Ecxeption(Mantıksal Hatalar):

Mantıksal hatalar diğer hatalara göre biraz daha zor tespit edilen hatadır.
genellikle yazılımcının dalğınlığından yada o anlık yanlış düşünmektrem kullanılır.
Bu tür hataların da nerede yapıldığı konusunda bilgi sahibi olmanın yollarından birisi
projemizi adım adım çalıştırmakla mümkündür. Visual Studio bunun içinde bize bir güzellik yapmıştır.
Breakpoint
Breakpointler program çalışırken nerelerde duraksaması gerektiğini söylediğimiz yerlerdir.
Siz şüphelendiğiniz satıra gelmeden önce breakpoint koyuyorsunuz. Visual Studio oraya gelince durup sizin kodlara bakmanıza izin veriyor.

Exception hataları:
Çalışma zamanın beklenmedik bir hatanın oluşumu sonrasında oluşturulan nesnelere istisnai durum sınıf nesneleri denir.
System.OutOfMemoryException:programın çalışması için yeterli bellek kalmadıysa oluşur.
System.NullReferenceException:Bellekte yer ayrılmamış bir nesne üzerinden sınıfın üye elemanlarına erişmeye çalışırken oluşur.
System.OverflowException:Bir veri türüne kapasitesinden fazla veri yüklemeye çalışırken oluşur.
System.InvalidCastException:Tür dönüştürme operatörüule geçersiz tür dönüşümü yapılmaya çalışıldığında oluşur.
System.IndexOutOfRangeException:Bir dizinin olmayan elemanına erililmeye çalışırken fırlatılır.
System.DividedByZero:Sıfıra bölme yapıldığı zaman oluşur.
System.FormatException:Metotlara yanlış biçimde parametre verildiğinde oluşur.


Olası hataları yakalamak için aşağıdaki catch yapısı çok kullanılmaktadır.

using System.Data.Entity.Validation;   nuget ' ten kütüphaneyi ekleyin



catch (DbEntityValidationException ex)
                            {
                               
                                foreach (var eve in ex.EntityValidationErrors)
                                {
                                    Console.WriteLine(string.Format("Entity türü \"{0}\" şu hatalara sahip \"{1}\" Geçerlilik hataları:", eve.Entry.Entity.GetType().Name, eve.Entry.State));
                                    foreach (var ve in eve.ValidationErrors)
                                    {
                                        Console.WriteLine(string.Format("- Özellik: \"{0}\", Hata: \"{1}\"", ve.PropertyName, ve.ErrorMessage));                                    }
                                }
                            }