Arkadaşlar merhaba benim sorum şu ;

Veritabanında Departmanlar tablosu ve bu tablonun DepartmanID,DepartmanAdi kolonları var.

DepartmanAdi unique key olarak tanımlı. Veritabanına departman adının ikinci kez kaydedilmesini istemiyorum.

DepartmanAdını

[WebMethod] public static string SaveDepartment(string departmanAdi) { string status = "";

            using (PhoneContext phoneContext = new PhoneContext())
            {
                Department dp = new Department { DepartmanAdi = departmanAdi };

                phoneContext.Departmanlar.Add(dp);
                phoneContext.SaveChanges();

                status = "success";
            }

        return status;
    }

bu kodlar ile kaydediyorum.Sorum şu ikinci kez aynı Departman adını girdiğimde bana "DbUpdateException was unhandled by user code" hatasını "phoneContext.SaveChanges();" bu kodun üzerinde fırlatıyor.İstediğim şey kullanıcıya bir hata mesajı verdirmek ve tekrardan departmanadını girmesini istemek bunu nasıl yapabilirim ?

soruldu: 27 Mar '15, 12:00

cpolat's gravatar image

cpolat
60447
cevap kabul oranı: 0%


cevabınız için teşekkür ederim.Demek istediğinizi anladım fakat kod paylaşırsanız daha iyi anlayabilirim ;)

permanent link

cevaplandı: 28 Mar '15, 05:37

cpolat's gravatar image

cpolat
60447
cevap kabul oranı: 0%

biraz daha detaylı anlatayım ... kullandığın metodda öncelikle bütün departmanları çek.. Sonra ekleyeceğin departman adı ile çektiklerini karşılaştır bir for veya foreach döngüsünde... eğer kayıtlı ise status = "error"; yoksa status="succes" değerini atayıp status u döndür... Yukarıdaki kodda bir kaç değişiklikle halledebilirsin...

(28 Mar '15, 08:13) Erdemym Erdemym's gravatar image

arkadaş tüm kayıtları çek teker teker kaydedeceğin değer ile kontrol et demiş buna ne gerek var Db ye kayıt yapmadan önce basit bir select çek ve "where name =?" şeklinde koşul koy eğer kayıt dönüyorsa aynı isimde kayıt mevcuttur, exception yakalamadan olayı yakalamış olursun hem daha kontrollü hem daha performanslı, istersen bundan sonra kendi tanımladığın bir exception fırlatırsın istersen hata kodu istersen başka bir şey bu sana kalmış.

permanent link

cevaplandı: 22 May '15, 07:58

ibrahim472's gravatar image

ibrahim472
1.9k1614
cevap kabul oranı: 10%

Unique index kontrolünde farklı farklı yönetmeler izlenebilir. Birinci yöntem başta böyle bir kaydın var olup olmadığına bakıp kullanıcıyı uyarabilirsin. Ama bu durumda her save den önce bunu db üzerinden kontrol ettirmen bence çok performanslı olmayacaktır.

İkinci yöntem Zaten soruduğun soruda DbUpdateException hatasına düştüğünü söylemişsin. Bu hatayı yakalayıp kullanıcıyı uyarabilirsin. Aşağı bir nebzede olasa kodu düzenledim. Ama test etmedim. Ama bu seni bu tür sorunlarda doğru yönlendireceğini düşünüyorum.

    [WebMethod]
    public static ResponseMessage SaveDepartment(string departmanAdi)
    {
        var response = new ResponseMessage();

        using (PhoneContext phoneContext = new PhoneContext())
        {
            Department dp = new Department { DepartmanAdi = departmanAdi };

            phoneContext.Departmanlar.Add(dp);

            try
            {
                phoneContext.SaveChanges();
                response.Message = "İşlem Başarılı";
                response.Status = "Success";
            }

            catch (DbUpdateException ex)
            {
                var sqlexception = ex.InnerException.InnerException as SqlException;
                if (sqlexception != null)
                {
                    //Bu kısım unique index bağlı hatanın yakalandığı kısım
                    if (sqlexception.Errors.OfType<SqlError>().Any(se => se.Number == 2601))
                    {
                        response.Message = "error";
                        response.Status = "Unique index bağlı hata mesajını buraya yazabilirsin";
                    }
                    else
                    {
                        response.Message = "error";
                        response.Status = "Diğer sqlexception bağlı hata mesajını buraya yazabilirsin";
                    }
                }
                response.Message = "error";
                response.Status = "Diğer DbUpdateException - hata mesajını buraya yazabilirsin";
            }
            catch (Exception)
            {
                response.Message = "error";
                response.Status = "Genel exception - hata mesajını buraya yazabilirsin";
            }

        }
        return response;
    }

    public class ResponseMessage
    {
        public string Status { get; set; }
        public string Message { get; set; }
    }
permanent link

cevaplandı: 06 Haz '15, 04:47

pars2307's gravatar image

pars2307
141127
cevap kabul oranı: 20%

değiştirildi: 06 Haz '15, 04:48

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×158
×18

Soruldu: 27 Mar '15, 12:00

Görüntüleme: 948 kez

Son güncelleme: 06 Haz '15, 04:48

powered by BitNami OSQA