Şimdi Ara

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

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
4.997
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
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.







  • Bi primary key ekle tabloya yeterli

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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.
  • Kayit etme isleminden once bi sorgu yaz gelen sonucu say 0 dan buyukse hata mesaji yazdirt
  • 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 >




  • 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




  • 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 >




  • 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.

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


    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 >




  • sorgulama sonrasında bağlantıyı kapat herhalde bağlantın açık kalıyor
  • 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?


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



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




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