Hata Yakalama Mekanizması

Hiç yorum yok
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




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.