logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
maytas  
#1 Gönderildi : 3 Ağustos 2016 Çarşamba 21:55:44(UTC)
maytas

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 24.11.2014(UTC)
Mesajlar: 34
Turkey

5 Kere Teşekkür Etti.
2 Mesajına Toplam 2 Kere Teşekkür Edildi.
SQL Server'de oluşturduğum tablonun kod alanına ayni kodun mükerrer girişini önlemek için unique key constrant oluşturdum.
Kayıt ekleme/güncelleme işlemini bir form üzerinden Linq to Sql metoduyla yapıyorum.
Doğal olarak var olan kodu tekrar girmeye çalıştığımda exception fırlatıyor, buraya kadar sorun yok.
Kodu deiğştirdiğimde ve mükerrer kayıt olmamasına rağmen ayni hatayı fırlatmaya devam ediyor, yani sıfırlayamıyor.
Formu kapatıp açtığımda sorun ortadan kalkıyor.
Böyle durumda her seferde formu açıp kapatmak kullanışlı değil.
Bu(ikinci) hata mesajını nasıl engellerim.
Kodlar aşağıda:
Kod:
       private void btnKaydet_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtGrupKodu.Text.Trim()))
            {
                txtGrupKodu.Focus();
                errorProvider1.SetError(txtGrupKodu, "Bu alanı boş geçemezsiniz.");
            }
            else if (string.IsNullOrEmpty(cmbOlcuBirimi.Text.Trim()))
            {
                cmbOlcuBirimi.Focus();
                errorProvider1.SetError(cmbOlcuBirimi, "Bu alanı boş geçemezsiniz.");
            }
            else if (string.IsNullOrEmpty(cmbGrupAdi.Text.Trim()))
            {
                cmbGrupAdi.Focus();
                errorProvider1.SetError(cmbGrupAdi, "Bu alanı boş geçemezsiniz.");
            }
            else
            {
                errorProvider1.Clear();
                
                if (string.IsNullOrEmpty(txtGrupID.Text.Trim()))
                {
                    veriEkle();
                }
                else
                {
                    veriGuncelle();
                }

                nesneleriKilitle();
                this.btnYeniKayit.Focus();
                this.btnKaydet.Enabled = false;

                changeSet = dc.GetChangeSet();

                try
                {                    
                    dc.SubmitChanges();
                    ListViewDoldur();
                    ChangeSetCalistir();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void veriEkle()
        {
            grupTablosu grup = new grupTablosu();

            grup.grupKodu = this.txtGrupKodu.Text;
            grup.olcuBirimi = this.cmbOlcuBirimi.Text;
            grup.grupAdi = this.cmbGrupAdi.Text;

            dc.grupTablosus.InsertOnSubmit(grup);
        }

        private void veriGuncelle()
        {
            int grupID = int.Parse(this.txtGrupID.Text);

            var guncellenecekVeri = (from m in dc.grupTablosus
                                     where m.grupID == grupID
                                     select m).Single();
            guncellenecekVeri.grupKodu = this.txtGrupKodu.Text;
            guncellenecekVeri.olcuBirimi = this.cmbOlcuBirimi.Text;
            guncellenecekVeri.grupAdi = this.cmbGrupAdi.Text;
        }

        void nesneleriAc()
        {
            this.txtGrupKodu.Enabled = true;
            this.cmbOlcuBirimi.Enabled = true;
            this.cmbGrupAdi.Enabled = true;
        }

        void nesneleriKilitle()
        {
            this.txtGrupKodu.Enabled = false;
            this.cmbOlcuBirimi.Enabled = false;
            this.cmbGrupAdi.Enabled = false;
        }

        void nesneleriTemizle()
        {
            this.txtGrupID.Text = null;
            this.txtGrupKodu.Text = null;
            this.cmbOlcuBirimi.Text = null;
            this.cmbGrupAdi.Text = null;
        }

        private void ListViewDoldur()
        {
            listView1.Columns.Clear();
            listView1.View = View.Details;
            listView1.GridLines = true;
            listView1.FullRowSelect = true;

            listView1.Columns.Add("GrupID", 55);
            listView1.Columns.Add("Grup Kodu", 100);
            listView1.Columns.Add("Ölçü Birimi", 100);
            listView1.Columns.Add("Grup Adı", 140);

            listView1.Items.Clear();
            foreach (grupTablosu item in dc.grupTablosus)
            {
                ListViewItem li = new ListViewItem(item.grupID.ToString());
                li.SubItems.Add(item.grupKodu);
                li.SubItems.Add(item.olcuBirimi);
                li.SubItems.Add(item.grupAdi);
                listView1.Items.Add(li);
            }
        }

        private void ChangeSetCalistir()
        {
            if (changeSet.Inserts.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla girilmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (changeSet.Updates.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla güncellenmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (changeSet.Deletes.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla silinmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


mehmetzekikir  
#2 Gönderildi : 4 Ağustos 2016 Perşembe 13:53:39(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Originally Posted by: maytas Go to Quoted Post
SQL Server'de oluşturduğum tablonun kod alanına ayni kodun mükerrer girişini önlemek için unique key constrant oluşturdum.
Kayıt ekleme/güncelleme işlemini bir form üzerinden Linq to Sql metoduyla yapıyorum.
Doğal olarak var olan kodu tekrar girmeye çalıştığımda exception fırlatıyor, buraya kadar sorun yok.
Kodu deiğştirdiğimde ve mükerrer kayıt olmamasına rağmen ayni hatayı fırlatmaya devam ediyor, yani sıfırlayamıyor.
Formu kapatıp açtığımda sorun ortadan kalkıyor.
Böyle durumda her seferde formu açıp kapatmak kullanışlı değil.
Bu(ikinci) hata mesajını nasıl engellerim.
Kodlar aşağıda:
Kod:
       private void btnKaydet_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtGrupKodu.Text.Trim()))
            {
                txtGrupKodu.Focus();
                errorProvider1.SetError(txtGrupKodu, "Bu alanı boş geçemezsiniz.");
            }
            else if (string.IsNullOrEmpty(cmbOlcuBirimi.Text.Trim()))
            {
                cmbOlcuBirimi.Focus();
                errorProvider1.SetError(cmbOlcuBirimi, "Bu alanı boş geçemezsiniz.");
            }
            else if (string.IsNullOrEmpty(cmbGrupAdi.Text.Trim()))
            {
                cmbGrupAdi.Focus();
                errorProvider1.SetError(cmbGrupAdi, "Bu alanı boş geçemezsiniz.");
            }
            else
            {
                errorProvider1.Clear();
                
                if (string.IsNullOrEmpty(txtGrupID.Text.Trim()))
                {
                    veriEkle();
                }
                else
                {
                    veriGuncelle();
                }

                nesneleriKilitle();
                this.btnYeniKayit.Focus();
                this.btnKaydet.Enabled = false;

                changeSet = dc.GetChangeSet();

                try
                {                    
                    dc.SubmitChanges();
                    ListViewDoldur();
                    ChangeSetCalistir();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void veriEkle()
        {
            grupTablosu grup = new grupTablosu();

            grup.grupKodu = this.txtGrupKodu.Text;
            grup.olcuBirimi = this.cmbOlcuBirimi.Text;
            grup.grupAdi = this.cmbGrupAdi.Text;

            dc.grupTablosus.InsertOnSubmit(grup);
        }

        private void veriGuncelle()
        {
            int grupID = int.Parse(this.txtGrupID.Text);

            var guncellenecekVeri = (from m in dc.grupTablosus
                                     where m.grupID == grupID
                                     select m).Single();
            guncellenecekVeri.grupKodu = this.txtGrupKodu.Text;
            guncellenecekVeri.olcuBirimi = this.cmbOlcuBirimi.Text;
            guncellenecekVeri.grupAdi = this.cmbGrupAdi.Text;
        }

        void nesneleriAc()
        {
            this.txtGrupKodu.Enabled = true;
            this.cmbOlcuBirimi.Enabled = true;
            this.cmbGrupAdi.Enabled = true;
        }

        void nesneleriKilitle()
        {
            this.txtGrupKodu.Enabled = false;
            this.cmbOlcuBirimi.Enabled = false;
            this.cmbGrupAdi.Enabled = false;
        }

        void nesneleriTemizle()
        {
            this.txtGrupID.Text = null;
            this.txtGrupKodu.Text = null;
            this.cmbOlcuBirimi.Text = null;
            this.cmbGrupAdi.Text = null;
        }

        private void ListViewDoldur()
        {
            listView1.Columns.Clear();
            listView1.View = View.Details;
            listView1.GridLines = true;
            listView1.FullRowSelect = true;

            listView1.Columns.Add("GrupID", 55);
            listView1.Columns.Add("Grup Kodu", 100);
            listView1.Columns.Add("Ölçü Birimi", 100);
            listView1.Columns.Add("Grup Adı", 140);

            listView1.Items.Clear();
            foreach (grupTablosu item in dc.grupTablosus)
            {
                ListViewItem li = new ListViewItem(item.grupID.ToString());
                li.SubItems.Add(item.grupKodu);
                li.SubItems.Add(item.olcuBirimi);
                li.SubItems.Add(item.grupAdi);
                listView1.Items.Add(li);
            }
        }

        private void ChangeSetCalistir()
        {
            if (changeSet.Inserts.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla girilmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (changeSet.Updates.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla güncellenmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (changeSet.Deletes.Count > 0)
            {
                MessageBox.Show("Kayıt başarıyla silinmiştir.", "Rapor", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }




Birde kodlarını try catch blogu içerisinde yazarak dener misin ?
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...
maytas  
#3 Gönderildi : 4 Ağustos 2016 Perşembe 19:29:25(UTC)
maytas

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 24.11.2014(UTC)
Mesajlar: 34
Turkey

5 Kere Teşekkür Etti.
2 Mesajına Toplam 2 Kere Teşekkür Edildi.
Originally Posted by: mehmetzekikir Go to Quoted Post


Birde kodlarını try catch blogu içerisinde yazarak dener misin ?


Sanırım, gözünüzden kaçtı, Try catch bloğu zaten var.

Kod:
private void btnKaydet_Click(object sender, EventArgs e)
 {
     if (string.IsNullOrEmpty(txtGrupKodu.Text.Trim()))
     {
         txtGrupKodu.Focus();
         errorProvider1.SetError(txtGrupKodu, "Bu alanı boş geçemezsiniz.");
     }
     else if (string.IsNullOrEmpty(cmbOlcuBirimi.Text.Trim()))
     {
         cmbOlcuBirimi.Focus();
         errorProvider1.SetError(cmbOlcuBirimi, "Bu alanı boş geçemezsiniz.");
     }
     else if (string.IsNullOrEmpty(cmbGrupAdi.Text.Trim()))
     {
         cmbGrupAdi.Focus();
         errorProvider1.SetError(cmbGrupAdi, "Bu alanı boş geçemezsiniz.");
     }
     else
     {
         errorProvider1.Clear();
          
         if (string.IsNullOrEmpty(txtGrupID.Text.Trim()))
         {
             veriEkle();
         }
         else
         {
             veriGuncelle();
         }
 
         nesneleriKilitle();
         this.btnYeniKayit.Focus();
         this.btnKaydet.Enabled = false;
 
         changeSet = dc.GetChangeSet();
 
         [b]try
         {                    
             dc.SubmitChanges();
             ListViewDoldur();
             ChangeSetCalistir();
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }[/b]
     }
 }


mehmetzekikir  
#4 Gönderildi : 5 Ağustos 2016 Cuma 14:56:11(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Originally Posted by: maytas Go to Quoted Post
Originally Posted by: mehmetzekikir Go to Quoted Post


Birde kodlarını try catch blogu içerisinde yazarak dener misin ?


Sanırım, gözünüzden kaçtı, Try catch bloğu zaten var.

Kod:
private void btnKaydet_Click(object sender, EventArgs e)
 {
     if (string.IsNullOrEmpty(txtGrupKodu.Text.Trim()))
     {
         txtGrupKodu.Focus();
         errorProvider1.SetError(txtGrupKodu, "Bu alanı boş geçemezsiniz.");
     }
     else if (string.IsNullOrEmpty(cmbOlcuBirimi.Text.Trim()))
     {
         cmbOlcuBirimi.Focus();
         errorProvider1.SetError(cmbOlcuBirimi, "Bu alanı boş geçemezsiniz.");
     }
     else if (string.IsNullOrEmpty(cmbGrupAdi.Text.Trim()))
     {
         cmbGrupAdi.Focus();
         errorProvider1.SetError(cmbGrupAdi, "Bu alanı boş geçemezsiniz.");
     }
     else
     {
         errorProvider1.Clear();
          
         if (string.IsNullOrEmpty(txtGrupID.Text.Trim()))
         {
             veriEkle();
         }
         else
         {
             veriGuncelle();
         }
 
         nesneleriKilitle();
         this.btnYeniKayit.Focus();
         this.btnKaydet.Enabled = false;
 
         changeSet = dc.GetChangeSet();
 
         [b]try
         {                    
             dc.SubmitChanges();
             ListViewDoldur();
             ChangeSetCalistir();
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }[/b]
     }
 }




orayı görmedim :)

kodu denemeden birşey diyemem teker teker debug yapmak lazım
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...
maytas  
#5 Gönderildi : 8 Ağustos 2016 Pazartesi 18:34:59(UTC)
maytas

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 24.11.2014(UTC)
Mesajlar: 34
Turkey

5 Kere Teşekkür Etti.
2 Mesajına Toplam 2 Kere Teşekkür Edildi.
Olayın hataya düşmesini önlemek için kayetmeden önce ilgili kodun tabloda var olup olmadığını kontrol ettiriyorum, ondan sonra kaydediyorum.
Böylece mükerrer kayıt ihtimalini ortadan kaldırmış oluyoruz.


Bu konudaki kullanıcılar
Guest (4)
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.