1. sayfa
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 |
ö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. |
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); } } |
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 > |
1. sayfa
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,
teşekkürler.