Arama butonu
Bu konudaki kullanıcılar: 1 misafir
10
Cevap
4999
Tıklama
0
Öne Çıkarma
c# ta database de aynı kayıtları engelleme için yardım
R
8 yıl
Yüzbaşı
Konu Sahibi

merhaba,

c# ta sql ile dataGridView1 kullandığım bir yazılımım var,
textbox lar üzerinden veri kaydettiğim bir veri ekle butonumla verileri kayıt edebiliyorum fakat bire bir aynı verileri de kayıt edebiliyor.

istediğim ID (textbox1) kısmını karşılaştırarak aynı id li kayıtları yapmayıp uyarı vermesi.
bunu nasıl sağlarım.

ekle butonumdaki kodlar,

 

baglantı.Open();
SqlCommand komut = new SqlCommand("insert into ARACTAKIP (DATA_ID,ARAC_PLAKA)", baglantı);
komut.Parameters.AddWithValue("@DATA_ID", textBox1.Text);
komut.Parameters.AddWithValue("@ARAC_PLAKA", textBox2.Text);


komut.ExecuteNonQuery();
verilerigoster("Select * from ARACTAKIP");
baglantı.Close();

textBox1.Clear();
textBox2.Clear();


teşekkürler.



S
8 yıl
Yarbay

Bi primary key ekle tabloya yeterli



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
R
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: The Domates

Bi primary key ekle tabloya yeterli




bunu yaptım zaten ama bi msjbox gösteremezmiyiz hata olarak.
bu şekilde kullanıcıya sanki programda bir hata varmış gibi mesaj çıkıyor.


Bu mesaja 2 cevap geldi.
S
8 yıl
Yarbay

Kayit etme isleminden once bi sorgu yaz gelen sonucu say 0 dan buyukse hata mesaji yazdirt



G
8 yıl
Yarbay

quote:

Orijinalden alıntı: reyta

quote:

Orijinalden alıntı: The Domates

Bi primary key ekle tabloya yeterli




bunu yaptım zaten ama bi msjbox gösteremezmiyiz hata olarak.
bu şekilde kullanıcıya sanki programda bir hata varmış gibi mesaj çıkıyor.



öncelikle bu tip işlemleri try catch içine yazarsanız daha iyi olur sql için araştırdım da hata kodu 2627 imiş ama sen genede çıkan hatanın kodunu öğren belki yanlıştır ondan sonra aşağıdaki gibi kodu düzeltirsin

try
{
//kayıt kodları
}
catch(SqlException ex)
{
if(ex.Number == 2627)
{
//mesaj kutusu benzer kayıt giremezsin gibi
}
}


bi bakarsın





< Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 8 Mart 2016; 18:01:03 >
Bu mesaja 1 cevap geldi.
R
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Gökşen PASLI
quote:

Orijinalden alıntı: reyta
quote:

Orijinalden alıntı: The Domates
Bi primary key ekle tabloya yeterli




bunu yaptım zaten ama bi msjbox gösteremezmiyiz hata olarak.
bu şekilde kullanıcıya sanki programda bir hata varmış gibi mesaj çıkıyor.



öncelikle bu tip işlemleri try catch içine yazarsanız daha iyi olur sql için araştırdım da hata kodu 2627 imiş ama sen genede çıkan hatanın kodunu öğren belki yanlıştır ondan sonra aşağıdaki gibi kodu düzeltirsin

try
{
//kayıt kodları
}
catch(SqlException ex)
{
if(ex.Number == 2627)
{
//mesaj kutusu benzer kayıt giremezsin gibi
}
}


bi bakarsın

yine çok teşekkürler


Bu mesaja 1 cevap geldi.
G
8 yıl
Teğmen

Böyle durumlar için sağlıklı bir sonuç elde etmeniz açısından bir fonksiyon oluşturup kayıt esnasında bu fonksiyon üzerinden elinizde değerin öncelikle veritabanında var olup olmadığını kontrol ettikten sonra veritabanına yazdırmanız iyi olacaktır.

Örnek olarak bir kodlama yazıyorum.

Öncelikle kaydet butonundan yola çıkalım

buttonClick eventini düşünelim
{
// örnek olarak textbox1.text yazdım ancak hangi değeri kontrol etmek istiyorsanız onu göndereceksiniz.Sonuç false ise kayıt yapacağız.Burdaki false kayıt yok anlamına gelmektedir.Bunu bir for döngüsü içerisinde kullanıyorsan yani çoklu kayıt yapıyorsan return yerine continue kullanmalısın.
return burada geri dön anlamında for içierisindede continue devam et yani döngünün bir sonraki aşamasına geç anlamında kullanılır.
if(TekrarKontroluYap(textbox1.text))
{
MessageBox.Show(textbox1.text+" Plakalı araç veritabanında kayıtlıdır.","HATA",MessageBoxButton.OK,MessageBoxIcon.Error);
return;
// Şeklinde kontrol edilen datayıda mesaj box ile kullanıcıya gösterebilir ve kayıt etmedenn çıkabilirsin.
}
Kaydet kodlamasını burdan sonra başlatıyoruz.
baglantı.Open();
SqlCommand komut = new SqlCommand("insert into ARACTAKIP (DATA_ID,ARAC_PLAKA)", baglantı);
komut.Parameters.AddWithValue("@DATA_ID", textBox1.Text);
komut.Parameters.AddWithValue("@ARAC_PLAKA", textBox2.Text);


komut.ExecuteNonQuery();
verilerigoster("Select * from ARACTAKIP");
baglantı.Close();

textBox1.Clear();
textBox2.Clear();

}
// Burada kendimize özel bir fonksiyon tanımlamış oluyoruz. ve parantez içerisine kontrol edeceğim deger bilgisini tanımlıyoruz.bool olarak tanımlamamızın sebebi bize işlem sonucunu true false olarak döndürecektir.
private bool TekrarKontroluYap(string data)
{
//DEGER dediğimiz alan tablodaki kontrol alanımız bir üye numarası belge numarası olabilir o anda textteki bilgiyi kayıt edeceğim alandır.
string sql= "SELECT DEGER FROM TABLOADI Where DEGER='"+data+"'";

string sql= "SELECT ARAC_PLAKA FROM ARACTAKIP Where ARAC_PLAKA='"+data+"'";


SqlCommand Cmd= new SqlCommand(sql,connection)
var sonuc = Cmd.ExecuteScalar();
if (sonuc != null) return true;
else return false;
}

Sonuç olarak burda yaptığım işlem benim gönderdiğim değerin tabloda olup olmadığı eğer bu değer tabloda varsa true yoksa false döndürecektir.
Bu sonuca göre buton eventinde kodlamaya devam edebilrisin.

edit: Ekleme.





< Bu mesaj bu kişi tarafından değiştirildi Gölge_SakaL -- 9 Mart 2016; 12:35:32 >
Bu mesaja 1 cevap geldi.
R
8 yıl
Yüzbaşı
Konu Sahibi

merhaba,
textboxlara eklediğim verileri database e kayıt etme esnasında aşağıdaki hatayı alıyorum
sorun nedir acaba?



programı bitirdim ve kendi bilgisayarımdan farklı bir bilgisayarda çalıştırmaya çalışıyorum.
sql2014 te hazırladım fakat kullanım için taşıdığım yerde sql2008 r2 kullanılıyor, db de bazı sorunlar yaşadım sonrasında aynı isimde bir db ve tablo oluşturdum.

program üzerinde db deki verileri göstermek için dataGridView1 kullanııyorum,


SqlConnection baglantı = new SqlConnection("Data Source=server;database=enerji;Integrated Security=True");

public void verilerigoster(string veriler)
{
SqlDataAdapter da = new SqlDataAdapter(veriler, baglantı);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}


listele buton komutu :
verilerigoster("Select *From tablo1");



olarak db de varolan verileri gösterebiliyorum.

Fakat;

ekle dediğimde aşağıdaki hatayı alıyorum.

< Resime gitmek için tıklayın >


ekle buton komutları:
try
{


//kayıt kodları
if (textBox1.Text == "" | textBox3.Text == "")
{
MessageBox.Show("Site No yada Site Id girişi yapmadınız !", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{

baglantı.Open();
SqlCommand komut = new SqlCommand("insert into tablo1 (SITE_NO,SEHIR_ILCE,SITE_ID)", baglantı);
komut.Parameters.AddWithValue("@SITE_NO", textBox1.Text);
komut.Parameters.AddWithValue("@SEHIR_ILCE", comboBox1.Text);
komut.Parameters.AddWithValue("@SITE_ID", textBox3.Text);

komut.ExecuteNonQuery();
verilerigoster("Select * from tablo1");
baglantı.Close();

}

}
catch (SqlException ex)
{
if (ex.Number == 2627)
{
baglantı.Close();
//mesaj kutusu benzer kayıt giremezsin gibi
MessageBox.Show(Kayıt Bulunmaktadır !", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}





< Bu mesaj bu kişi tarafından değiştirildi reyta -- 15 Mart 2016; 16:36:56 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gökşen PASLI
G
8 yıl
Yarbay

sorgulama sonrasında bağlantıyı kapat herhalde bağlantın açık kalıyor


Bu mesaja 1 cevap geldi.
R
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Gökşen PASLI

sorgulama sonrasında bağlantıyı kapat herhalde bağlantın açık kalıyor

sorun db de tahalı bir alan adından kaynaklanmış, o çözüldü.



şimdi ben kendi bilgisayarımda hazırladığım uygulamayı,
farklı bir lokasyonda server üzerine kopyaladım, database im ve exe olarak uygulamam server üzerinden çalıştırılınca sorunsuz çalışıyor.
tüm butonarımi sql bağlantılarım hepsi sorunsuz.

bunu diğer kullanıcıların kullanımına nasıl açacağım ?

server üzerinde exe nin bulunduğu klasöre diğer kullanıcılara erişim yetkisi verdim,
farklı bir kullanıcıya serverdaki exe ye kısayol oluşturdum, programın exe si açıldı fakat sql tarafında sorun yaşıyorum.
aşağıdaki hatayı alıyorum,

sql server tarafında eksik birşeyler mi var acaba, ayrıca bir yetkilendirmeye gerek var mıdır?


< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi reyta -- 16 Mart 2016; 17:58:07 >


Bu mesajda bahsedilenler: @Gökşen PASLI
G
8 yıl
Yarbay

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.