27 Haziran 2010 Pazar

Cannot start Microsoft Office Outlook. Cannot open the Outlook window.

Merhaba bu hatayı ofiste çalışırken birden outlook hesabımın bozulması sonucu aldım. Çok enteran bir şekilde outlook hiç bir türlü açılmadı.
Sorunu şu şekilde çözdüm.
Başlat –> Çalıştır
C:\Program Files (x86)\Microsoft Office\Office12\outlook.exe /resetnavpane
İşletim sistemim win-7 64 bit bunu söylemektede yarar var.

25 Haziran 2010 Cuma

Hata Yakalama (Exception Handling) – Hata Sınıfı Oluştumak

Bir önceki makalemizde kullandığımız hata sınıflarının tümü Exception sınıfına aitti. Programcılar bazı durumlarda kendi hata sınıfını oluşturmak isteyebilir. Kendi hata sınıfınızı hazırlarken hazırlayacağınız sınıf Exception ve ApplicationException sınıflarının mirasçısı olmalıdır. Aşağıda basit bir Exception sınıfı oluşturuyorum.

    public class MyExceptionClass : Exception
    {
        public MyExceptionClass()
         {

         }
     }

Oluşturduğum bu sınıfın metodu herhangi bir satıra ve parametreye sahip değil. Bu şekilde oluşturduğumuz Exception sınıfını herhangi bir uygulamada kullanabiliriz. Şimdi sınıfımız test edelim. Bunun için formuma bir buton koyuyorum. Click olayında 2 sayının birbirine eşit olup olmadığını kontrol edecek. Eğer sayılar birbirine eşit değilse Exception fırlatmasını istiyorum.

            try
            {
                int a = 3;
                int b = 5;
                if (a == b )
                {
                    MessageBox.Show("Ok");
                }
                else
                {
                    throw new MyExceptionClass();
                }
              }
             catch (MyExceptionClass ex )
              {
                    MessageBox.Show(ex.Message);
               }

throw keywordunu kullanarak programda bir hata olduğunu ve işlemin catch bloğuna düşmesini sağladım. Catch bloğunda ise hazırladığım exception nesnesinin orjinal mesajını kullanıcıya yansıttım.

image1

Eğer kullanıcıya kendi hazırladığımız hata mesajını göstermek istersek MyExceptionClass sınıfında ki metodumuzun string bir değer alarak bunu kullancıya göstermesini sağlayabiliriz.

private string errorMessage;

    public MyExceptionClass(string errorMessage): base(errorMessage)
    {

        this.errorMessage = errorMessage;
    }

Sıfımızı bu şekilde güncelledikten sonra örneğimizi güncelleyerek sonucu görelim.

             try
            {
                int a = 3;
                int b = 5;
                if (a == b)
                {
                    MessageBox.Show("Ok");
                }
                else
                {
                    throw new MyExceptionClass("Sayılar birbirine eşit değil");
                }
            }
            catch (MyExceptionClass ex)
            {
                MessageBox.Show(ex.Message);
            }

image

Bu şekilde kendi exception sınıfımızı üretebilir. Daha da detaylandırabiliriz. Önemli olan sınıfımızda doğru parametreler kullanarak sınıfımızı özelleştirmekten ibaret olacaktır.

Umarım yararlı olmuştur.

22 Haziran 2010 Salı

Hata Yakalama(Exception Handling)

Merhaba bu yazımızda hata yakalama konusu üzerinde duracağız. Geliştirme yaparken farkında olmadan bir çok mantıksal hata yapabilir, run-time’da bu hataların acısını çekerek programınızın sonlandırılmasını izleyebilirsiniz. İşte hata yakalama, run- time’da oluşan ve programızın sonlandırılmasına neden olan hataları yakalamamızı sağlayan ve bu hataların yönetilebilir bir duruma getiren mekanizmadır.

Bazı hataları öngörebilir, bu hatalara gerekli önlemleri siz kod yazarken alabilirsiniz. Peki öngöremediğiniz hatalarda ne olacak? Bu durumda .Net hata yakalama mekanizması devreye giriyor.

Hata yakalama mekanizması nasıl çalışır?

Aslına bakacak olursak .Net için  tüm hatalar bir nesnedir. Oluşan tüm hatalar System.Exception sınıfından türemektedir.Eğer sizin yakalayamadığınız bir hata oluşursa Common Language Runtime bunu yakalar ve programınızın sonlanmasına sebep olur.

Oluşan bu hata nesnelerini nasıl yakalayıp, nasıl yöneteceğiz?

Hata yakalama ve yönetme işlemini aşağıdaki kod bloğunu yazarak gerçekleştireceğiz.

            try
            {
                 //Hata oluşabilecek hata kosu bu bloğa yazılır
            }
            catch 
            {
                //Hata oluşursa bu blok devreğe girer hatayı yakalar ve işler. 
            }
            finally
            { 
                //Hata oluşssada, oluşmasada çalışması istediğimiz bir kod varsa bu bloğa yazılır.
            }

Bunu bir örnek ile açıklayacak olursak.

            try
            {
                List<int> numbers = new List<int>();
                for (int i = 0; i < 10; i++)
                {
                    numbers.Add(i);
                }
                MessageBox.Show(numbers[15].ToString());
            }
           catch (Exception ex)
            {
                MessageBox.Show("Hata Mesajı: " + ex.Message);
                MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace );

            }
           finally
            {
                Application.Exit();
            }

Bu örneğimizde bir sayı koleksiyon oluşduk. Bu sayı koleksiyona ona kadar olan sayıları ekledik. Ama indexi 15 olan bir sayıyı mesaj kutusunda göstermek istedik. Dolayısıyla bu kod parçası hataya düşecektir. catch bloğunda tanımlanan ex Exception nesnesine ait property olan Message bize bu hatayı bir mesaj kutusunda gösterecek, diğer bir property olan StackTrace bize bu hatanın oluştuğu adımı başka bir mesaj kutusunda gösterecek finally bloğunda yer alan Application.Exit() kodu programımızı sonlandıracaktır.

Hata Mesajı:

imag

Hatanın oluştuğu kısım:

image

finally bloğunda yapabileceğiniz durum kodun davranışına göre değişebilir. Örneğin try bloğu içerisinde bir sql bağlantısı oluşturdunuz ve açtınız. bağlantıyı kapattığınız satıra daha gelmeden bir hataya düşerek catch bloğuna düştünüz. Dolayısıyla bağlantınız açık kaldı. Finally bloğunda bu bağlantıyı kapatabilirsiniz.

Birden fazla catch bloğu kullanmak

            try
            {
                List<int> numbers = new List<int>();
                for (int i = 0; i < 10; i++)
                {
                    numbers.Add(i);
                }

                numbers = null;

                MessageBox.Show(numbers[15].ToString());
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show("Hata Mesajı: " + ex.Message);
                MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Hata Mesajı: " + ex.Message);
                MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace);
            }
            finally
            {
                Application.Exit();
            }

Bu kodda  bir catch bloğu ekleyerek ex NullReferenceException nesnesi yardımıyla boş değerden kaynaklanan işlem hatalarını yakalamaya çalışacağız. Bir önceki örneğimizde kullandığım numbers koleksiyonuna boş değer set ederek boş bir koleksiyonun indeksine ulaşmayı istemek bana bu hata mesajını döndürecektir.

Hata Mesajı:

image1

Hatanın oluştuğu kısım:

image2

 

Birden fazla catch bloğu kullandığımız zaman catch blokları sırası ile değerlendirilir. Oluşan hata ilk hangi bloğa uyuyorsa o blokta çalıştırılır ve diğer bloklar dikkate alınmaz. Bu nedenle catch bloklarımız oluştururken tüme varım ilkesiyle hareket etmemiz daha iyi olacaktır. Yani özelden genele doğru bir hata yakalama işlemi yapmamız gerekmektedir. Aynı yukarıdaki örnek gibi.

Bir sonraki makalemde kendi hata sınıflarımızı yaratarak kullanacağız.

İyi çalışmalar.