Bu yazımızda C# Access bağlantısında oluşabilecek OledbException hatalarının nasıl yakalanabileceğini göreceğiz. Bu işlem için oluşturacağımız basit örneğimizde Primary Key yani Birincil Anahtardaki alana aynı değeri yani önceden girilmiş bir değeri girme ve yine Birincil Anahtara değer girmeme durumunda oluşan hataları yakalayarak MessageBox‘ ta uyarı verdireceğiz.
Şimdi bu işlemleri nasıl gerçekleştireceğimizi görelim. Öncelikle basit bir veri tabanı bağlantısı oluşturalım. Örneğimizde kullandığımız veritabanı aşağıdaki gibidir. (dbOkul.accdb)
Formumuz ise aşağıdaki gibi olacaktır.
Ogrenci tablosuna deneme amaçlı birkaç veri girerek devam edelim. Veri girişini yaptıktan sonra Form yüklendiğinde kayıtların görüntülenmesini sağlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public partial class Form1 : Form { OleDbConnection con; OleDbDataAdapter da; OleDbCommand cmd; DataSet ds; public Form1() { InitializeComponent(); } void griddoldur() { con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=dbOkul.accdb"); da = new OleDbDataAdapter("SElect *from Ogrenci", con); ds = new DataSet(); con.Open(); da.Fill(ds, "Ogrenci"); dataGridView1.DataSource = ds.Tables["Ogrenci"]; con.Close(); } private void Form1_Load(object sender, EventArgs e) { griddoldur(); } |
Şimdi asıl konumuza geliyoruz. Bizim için Ogrenci tablosunda bulunan ogrno alanı Primary Key olarak ayarlı. Yani tekil olmak zorunda. Kullanıcı aynı kayıtlı olan bir öğrenci numarası girerse program hata verecektir. Bu hatayı yakalamak ve gerekli mesajı vermek için Ekle butonuna aşağıdaki kodları yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
private void button1_Click(object sender, EventArgs e) { cmd = new OleDbCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "insert into ogrenci (ogrno,ograd,ogrsoyad,ogrtelefon) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')"; try { cmd.ExecuteNonQuery(); } catch(OleDbException ex) { if(ex.ErrorCode==-2147467259) { MessageBox.Show("Girmiş olduğunuz numara kullanılmakta!!!"); } } con.Close(); griddoldur(); } |
Şimdi programımızı çalıştırarak yeni ekleyeceğimiz öğrenci için daha önceden kullanılmış bir öğrenci numarası girerek yeni bir kayıt oluşturmaya çalışalım. Görüleceği gibi programımız bir hatayla karşılaştı ve bu hatayı yakalayarak mesaj olarak göstermiş olduk.
Peki bu -2147467259 değeri nereden çıktı diyecek olursanız; bu değeri şu şekilde bulabilirsiniz.
Catch bloğuna sadece;
1 2 3 |
MessageBox.Show(ex.ErrorCode.ToString()); |
Artık bu değeri öğrendiğimize göre bu değeri alıp if bloğuna yazarak ve messageBox’a “Öğrenci numarasını girmediniz.” şeklinde bir mesaj yazdırabilirsiniz.
Kodlarımızın tamamı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace primarykeytrycatch { public partial class Form1 : Form { OleDbConnection con; OleDbDataAdapter da; OleDbCommand cmd; DataSet ds; public Form1() { InitializeComponent(); } void griddoldur() { con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=dbOkul.accdb"); da = new OleDbDataAdapter("SElect *from Ogrenci", con); ds = new DataSet(); con.Open(); da.Fill(ds, "Ogrenci"); dataGridView1.DataSource = ds.Tables["Ogrenci"]; con.Close(); } private void Form1_Load(object sender, EventArgs e) { griddoldur(); } private void button1_Click(object sender, EventArgs e) { cmd = new OleDbCommand(); con.Open(); cmd.Connection = con; cmd.CommandText = "insert into ogrenci (ogrno,ograd,ogrsoyad,ogrtelefon) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')"; try { cmd.ExecuteNonQuery(); } catch(OleDbException ex) { //MessageBox.Show(ex.ErrorCode.ToString()); if(ex.ErrorCode==-2147467259) { MessageBox.Show("Girmiş olduğunuz numara kullanılmakta!!!"); } } con.Close(); griddoldur(); } } } |
Ben size burası dışında nereden ulaşabilirim ?
ahmet.cansever@yandex.com.tr mail adresinden ulaşabilirsiniz.