anilguleryuz Posted May 11, 2016 Share Posted May 11, 2016 (edited) Arkadaşlar biliyorum çok fazla soru soruyorum sizlere ama proje ödevimden dolayı foruma neredeyse giremiyorum bile, c# da bağlantısını yapmış olduğum bir access veritabanım var. Hasta kayıt otomasyonu yapıyorum. Dün projemi kontrole g.ötürdüm. Bu sefer de benden istenilen şey aynı tc kimlik numarası girilince veritabanına kayıt yapma girişi engellenmesi istendi. Access den veritabanıma tasarım görünümünde "gerekli" ve "yineleme yok" seçeneklerini etkinleştirdim. Daha sonrasında formumda try catch yapısını kullandım. Her şekilde veritabanına kayıt yapıyor. Bir türlü engelleyemedim. Try-catch yapısı kullanmadan denediğim zaman aynı tc kimlik numarası girildiğinde program veritabanı hatası verdi. Bunu nasıl düzeltebilirim. Daha sonrasında zaten try catch yapısını formdan sildim. Kayıt kodlarım şu şekilde; { baglanti.Open(); komut.Connection = baglanti; komut.CommandText = "insert into hastane (Adi,Soyadi,TC_No,Ziyaret_Edecegi_Birim,Doktor,Adres) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + maskedTextBox1.Text + "','" + comboBox1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')"; komut.ExecuteNonQuery(); komut.Dispose(); baglanti.Close(); MessageBox.Show("Kayıt Başarıyla Tamamlandı!", "Kayıt Tamamlandı!", MessageBoxButtons.OK, MessageBoxIcon.Information); textBox1.Clear(); textBox2.Clear(); maskedTextBox1.Clear(); textBox4.Clear(); ds.Clear(); yuzde = 0; progressBar1.Value = yuzde; } Edited May 11, 2016 by anilguleryuz Quote Link to comment Share on other sites More sharing options...
KintaRo Posted May 11, 2016 Share Posted May 11, 2016 neden try catch? if else ile de yapabilirsin? tckimlik noları tuttuğun sütundaki verilerle girilen tck yı eşleştirirsin, varsa hata verir, yoksa ekler. Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted May 11, 2016 Share Posted May 11, 2016 (edited) Senin için ufak bir örnek hazırladım fakat SQL Server kullandığım ve tc alanı ne tür olduğunu bilemediğim için parametre kullandım kendine göre düzenlersin. SqlDataReader rdr = null; SqlConnection con = null; SqlCommand cmd = null; ConnectionString cs = new ConnectionString(); //Buraya bağlantı bilgilerin olduğu class gelecek con = new SqlConnection(cs.DBConn); //Buraya con string gelecek con.Open(); string tc = "select tckimlikno from hastalar where tckimlikno=@find"; //Buraya sorgu gelecek cmd = new SqlCommand(tc); cmd.Connection = con; cmd.Parameters.Add(new SqlParameter("@find", System.Data.SqlDbType.NChar, 30, "tckimlikno")); cmd.Parameters["@find"].Value = txtTckimlikNo.Text; rdr = cmd.ExecuteReader(); if (rdr.Read()) //Tc var mı ? { MessageBox.Show("Bu Kimlik Numarası Sistemde Bulunmaktadır!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error); txtTckimlikNo.Text = ""; txtTckimlikNo.Focus(); if ((rdr != null)) { rdr.Close(); } return; } İşin mantığı ExecuteReader ile sorgudan gelen bir veri olup olmadığını kontrol etmek rdr.HashRow da kullanabilirsin. Ufak bir öneri daha sunalım textboxlardan gelen veriyi .text + ile sorguya bağlamak yerine yukarıda yazdığım gibi parameter.add deyip valueye textboxlarını eşitleyebilirsin. Bununla ilgili bir ara örnek hazırlayalım kolaylık sağlıyor cmd.Parameters.Add(new SqlParameter("@find", System.Data.SqlDbType.NChar, 30, "username")); cmd.Parameters["@find"].Value = txtUsername.Text; Edited May 11, 2016 by SimpsoN_Bart 3 Quote Link to comment Share on other sites More sharing options...
anilguleryuz Posted May 28, 2016 Author Share Posted May 28, 2016 On 12 Mayıs 2016 at 02:25, SimpsoN_Bart yazdı: Senin için ufak bir örnek hazırladım fakat SQL Server kullandığım ve tc alanı ne tür olduğunu bilemediğim için parametre kullandım kendine göre düzenlersin. SqlDataReader rdr = null; SqlConnection con = null; SqlCommand cmd = null; ConnectionString cs = new ConnectionString(); //Buraya bağlantı bilgilerin olduğu class gelecek con = new SqlConnection(cs.DBConn); //Buraya con string gelecek con.Open(); string tc = "select tckimlikno from hastalar where tckimlikno=@find"; //Buraya sorgu gelecek cmd = new SqlCommand(tc); cmd.Connection = con; cmd.Parameters.Add(new SqlParameter("@find", System.Data.SqlDbType.NChar, 30, "tckimlikno")); cmd.Parameters["@find"].Value = txtTckimlikNo.Text; rdr = cmd.ExecuteReader(); if (rdr.Read()) //Tc var mı ? { MessageBox.Show("Bu Kimlik Numarası Sistemde Bulunmaktadır!", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error); txtTckimlikNo.Text = ""; txtTckimlikNo.Focus(); if ((rdr != null)) { rdr.Close(); } return; } İşin mantığı ExecuteReader ile sorgudan gelen bir veri olup olmadığını kontrol etmek rdr.HashRow da kullanabilirsin. Ufak bir öneri daha sunalım textboxlardan gelen veriyi .text + ile sorguya bağlamak yerine yukarıda yazdığım gibi parameter.add deyip valueye textboxlarını eşitleyebilirsin. Bununla ilgili bir ara örnek hazırlayalım kolaylık sağlıyor cmd.Parameters.Add(new SqlParameter("@find", System.Data.SqlDbType.NChar, 30, "username")); cmd.Parameters["@find"].Value = txtUsername.Text; Cevap vermem biraz geç oldu ama malum proje ödevimle ilgilenince foruma pek giremedim açıkçası tc kimlik olayını da yapamadım foruma giremediğimden yine çok teşekkür ederim Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.