Database Akademi
»
Programlama
»
CSHARP
»
Unique Key Constrant hatası!
Sıralama: Advanced Member
Gruplar: Registered
Katılan: 24.11.2014(UTC) Mesajlar: 34 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);
}
}
|
|
|
|
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 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ıztwitter.com/dbakademi Dua ve teşekkür en büyük servetlere bedel... |
|
|
|
Sıralama: Advanced Member
Gruplar: Registered
Katılan: 24.11.2014(UTC) Mesajlar: 34 5 Kere Teşekkür Etti. 2 Mesajına Toplam 2 Kere Teşekkür Edildi.
|
Originally Posted by: mehmetzekikir
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]
}
}
|
|
|
|
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 Originally Posted by: mehmetzekikir
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ıztwitter.com/dbakademi Dua ve teşekkür en büyük servetlere bedel... |
|
|
|
Sıralama: Advanced Member
Gruplar: Registered
Katılan: 24.11.2014(UTC) Mesajlar: 34 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.
|
|
|
|
Database Akademi
»
Programlama
»
CSHARP
»
Unique Key Constrant hatası!
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.