Hata Yakalama Mekanizması
Merhaba Arkadaşlar ,Birçoğumuz proje yazarken belli mimarı yapıları kullanırız .Ve bu yapılar sayesinde gerçekleşebilecek hata kayıtlarını belli bir noktada yakalayıp hatanın kaynağına inip gerekli düzenleme işlemlerine tabi tutarız projemizi.İşte bu aşamada kullanmış olduğum Entity-Face mimari yapısı içindeki hata yakalama mekanizmasından bahsediyor olacağım.İlk olarak veri tabanımızdaki işlemleri store procedure yardımıyla gerçekleştirdiğimi belirtmek isterim.Tabi bu aşamada sizlerde kendi mimari modeliniz içindeki strore proc 'unuzu yazabilirsiniz.Ben kullanmış olduğum yapıyı basit bir örnek üzerinden anlatmaya çalışacağım.İlk olarak yazmış olduğum store procedure paylaşarak başlayalım.
USE [MetinEditorUygulamasi]
GO
/****** Object: StoredProcedure [dbo].[HataKaydiEkle] Script Date: 07/10/2014 00:16:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create proc [dbo].[HataKaydiEkle]
(
@Numara nvarchar(6),
@Mesaj nvarchar(1000),
@Procedure nvarchar(100)
)
as
Insert Into Hataci(Numara,Mesaj,[Procedure]) values(@Numara,@Mesaj,@Procedure)
Bu procedure yardımıyla hatanın hangi procedure üzerinde gerçekleştiğini yakalamaktayız.Daha sonrasında visual studio üzerine geçip bu procedure kullanan classımız içersinde metodumuzu tanımlıyor olacağız
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace Facede { public class Hataci { /// <summary> /// Proje içinde oluşabilecek hataların yakalanması mekanizmasını temsil eden class /// </summary> /// <param name="hata"></param> public static void YeniHataKaydi(SqlException hata) { SqlConnection cnn = new SqlConnection(Util.ConnectionString); SqlCommand cmd = new SqlCommand("HataKaydiEkle", cnn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@Numara", hata.Number); cmd.Parameters.AddWithValue("@Mesaj", hata.Message); cmd.Parameters.AddWithValue("@Procedure", hata.Procedure); try { cnn.Open(); cmd.ExecuteNonQuery(); string gidecekadres = "Hata alınması durumunda gidecek mail adresi"; // Mail Gönderme İşlemleri Yer alacak string sorun = hata.Message; Mail ml = new Mail("Hata Mesaj Uyarısı", sorun, gidecekadres); Mail.Gonder(ml); } catch (SqlException ex) { } finally { cnn.Close(); } }
} }Daha sonrasında vüsial studio tarafındaki projemiz içersinde kodlarda hata çıkması aşamasında Hatacı classımıza yönlenecek bir adet daha class ekleyelim .Ben İsmini Util olarak verdim.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace Facede { public class Util { // Bu claas içinde sıklıkla yapılan database işlemlerini burdan gercekleştiriyor olacağız // Metodun static yapılmasındaki sebeb ise clasın sürekli instance almamaktır (örnek) //Projenin genelinde Kullanılacak baglantı public static string ConnectionString = "Server=.;Database =MetinEditorUygulamasi;User Id=sinanarslan;Password=12345;"; public static int Yurut(SqlCommand cmd) { /// Etkilenen satır sayısı degişkeninin amacı etkilenen satır ı bulmak ///işlem eger güncelleme silme ekleme ise 1 ///işlem herhangi bir satır etiklenmez ama sorgu calsırsa 0 /// işlem sırasında bir hata meydana gelirse -1 olacaktır int etkilenenesatirsayisi = -1; try { cmd.Connection.Open();// baglanti acıldı etkilenenesatirsayisi = cmd.ExecuteNonQuery(); } catch (SqlException ex) { #warning proje sonunda burayı sil son kullanıcı kod kısımlarını görmesin Hataci.YeniHataKaydi(ex); } finally { cmd.Connection.Close(); } return etkilenenesatirsayisi; } } }
Artık Face içersindeki Class library'imiz hazır birde bu
aşamada basit bir yol izleyip injection önlemek amacıyla bir adet Kontrol
clası ekleyelim
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Facede { public class Kontrol { public Kontrol() { } public static string Temizle(string Metin) { string keyword = Metin; keyword = keyword.Replace(" ", ""); keyword = keyword.Replace("'", ""); keyword = keyword.Replace("[", ""); keyword = keyword.Replace("(", ""); keyword = keyword.Replace("?", ""); return keyword; }// injection Engellemek için yazıldı } }Ve Şimdi Projemizin Son Halini Görelim
Umarım faydalı olur.Bir Sonraki makalede görüşmek üzere
Kaydol:
Kayıt Yorumları
(
Atom
)
Hiç yorum yok :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.