Jump to content
Son zamanlarda artan kullanıcı hesap hırsızlıkları sebebiyle tüm kullanıcılara şifre sıfırlama maili gönderilmiştir. Lütfen güveli şifreler seçiniz. Mevcut e-mail adresinize erişemiyorsanız, en aşağıdaki destek linkinden bize ulaşınız. ×

Try-catch Yapısını Kullanamıyorum


anilguleryuz
 Share

Recommended Posts

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 by anilguleryuz
Link to comment
Share on other sites

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. :db:

	           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 by SimpsoN_Bart
  • Like 3
Link to comment
Share on other sites

  • 3 hafta sonra ...
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. :db:


	           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 

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...