Şifremi/Kullanıcı Adımı Unuttum
Bağlan Google+ ile Bağlan Facebook ile Bağlan
Şimdi Ara

c# ta database de aynı kayıtları engelleme için yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir Kullanıcı
10
Cevap
0
Favori
2.690
Tıklama
Cevapla
Tüm Forumlar >> Web Tasarım - Programlama >> Yazılım Geliştirme >> Delphi / C++ /Vb >> c# ta database de aynı kayıtları engelleme için yardım
Sayfaya Git:
Sayfa:
1
Giriş
Mesaj
  • Yüzbaşı
    453 Mesaj
    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.



    |
    |
    _____________________________




  • Yarbay
    2425 Mesaj
    Bi primary key ekle tabloya yeterli



    < Bu ileti mobil sürüm kullanılarak atıldı >
    _____________________________
  • Yüzbaşı
    453 Mesaj
    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.
    _____________________________
  • Yarbay
    2425 Mesaj
    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.

    Alıntıları Göster
    Kayit etme isleminden once bi sorgu yaz gelen sonucu say 0 dan buyukse hata mesaji yazdirt
    |
    |
    _____________________________




  • Yarbay
    3554 Mesaj
    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 >
    _____________________________
    Senin de XAMLına korum Senin de XAMLına korum




  • Yüzbaşı
    453 Mesaj
    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
    |
    |
    _____________________________




  • Teğmen
    170 Mesaj
    quote:

    Orijinalden alıntı: reyta

    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

    Alıntıları Göster
    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 >
    |
    |
    _____________________________
    ​Yazılım Geliştirme Uzmanı / Software Developing Expert

    MSI GS70 17.3 Gaming Notebook

    Renault Clio IV 1.5 DCI




  • Yüzbaşı
    453 Mesaj

    quote:

    Orijinalden alıntı: Gölge_SakaL

    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.

    Alıntıları Göster
    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.









    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 >
    |
    |
    Bahsedilenler: Gökşen PASLI
    _____________________________




  • Yarbay
    3554 Mesaj
    quote:

    Orijinalden alıntı: reyta

    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.









    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);

    }

    }

    Alıntıları Göster
    sorgulama sonrasında bağlantıyı kapat herhalde bağlantın açık kalıyor
    _____________________________
    Senin de XAMLına korum Senin de XAMLına korum




  • Yüzbaşı
    453 Mesaj

    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?








    < Bu mesaj bu kişi tarafından değiştirildi reyta -- 16 Mart 2016; 17:58:07 >
    |
    |
    Bahsedilenler: Gökşen PASLI
    _____________________________




  • Yarbay
    3554 Mesaj
    |
    |
    _____________________________
    Senin de XAMLına korum Senin de XAMLına korum
HızlıCevap
Sayfaya Git:
Sayfa:
1
Reklamlar
e-ticaret
sohbet
Kurumsal Web Tasarım Şirketi
Paykasa
SEO
haberler
Bu sayfanın
Mobil sürümü
Mini Sürümü

BR4
0,328
1.2.165

Reklamlar
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.