Bu yazımızda C# ile veritabanında kayıt kontrolü yapan bir örnek oluşturacağız. Örneğimizde 1 den 20 ye kadar raflar ve bu raflarda ürünler olacak. Fakat bazı raflarda ürün olmadığından o raf numarası tabloda görünmeyecek.Veri tabanında boş olan bu rafları bularak listeleyeceğiz.
Kullanacağımız tablo;
Tabloyu incelediğimizde “rafno” alanında 1-20 arası olduğunu fakat bazı numaraların (6,8,11,12,14,17,18,19) olmadığını görüyoruz. Programımızda bu numaraları tespit edeceğiz.
Bu işlemi 2 farklı şekilde gerçekleştireceğiz. İlk yöntemimiz direk olarak veritabanına bağlanarak sorgulama yapmak, diğer yöntemimiz ise DatagridView ‘de kaydı arama şeklinde olacak. Ayrıca kontrol işlemlerini bir metot içinde gerçekleştireceğiz.
Form tasarımı;
Kodlarımız:
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 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 BosRafBul { public partial class Form1 : Form { public Form1() { InitializeComponent(); } OleDbConnection con=new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=deneme.accdb"); OleDbCommand cmd; OleDbDataAdapter da; OleDbDataReader dr; DataTable dt; private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("BOŞ RAFLAR"); listBox1.Items.Add("===================="); for (int i = 1; i <= 20; i++) { if (RafKontrol(i) == false) { listBox1.Items.Add(i); } } } public bool RafKontrol(int numara) { bool bosmu=false; string sql = "SELECT *FROM urun WHERE rafno="+numara+""; con.Open(); cmd = new OleDbCommand(sql, con); dr = cmd.ExecuteReader(); if(dr.Read()) { bosmu = true; } con.Close(); return bosmu; } public bool RafKontrol2(int numara) { bool kontrol = false; DataView dv = dt.DefaultView; dv.RowFilter = "rafno="+numara; if (dv.Count != 0) { kontrol = true; } return kontrol; } void Yukle() { da = new OleDbDataAdapter("SELECT * FROM urun", con); dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; } private void Form1_Load(object sender, EventArgs e) { Yukle(); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add("BOŞ RAFLAR"); listBox1.Items.Add("===================="); for (int i = 1; i <= 20; i++) { if (RafKontrol2(i) == false) { listBox1.Items.Add(i); } } Yukle(); } } } |
Kodları incelediğimizde 2 yönteminde olduğunu görmekteyiz. Programın yapısına göre İkisinden biri tercih edilebilir. Fakat çok fazla raf olduğunu düşünürsek devamlı olarak bağlantı açılıp kapatılması bazı sorunları beraberinde getirebilir.
RafKontrol metodunda veritabanına bağlanılarak konrol işlemi yani kaydın olup olmadığı kontrol ediliyor.
RafKontrol2 metodunda ise veri tabanı bağlantısı olmadan DataGridView üzerinde arama yapıldığını görüyoruz.
Yukle metodu ile verilerin datagridview üzerinde listelenmesi gerçekleştirilmekte.
Buttonlar için ise 1-20 arası bir For Döngüsü kurularak bu sayıların metotlara gönderildiğini ve dönen bool türündeki değere göre listbox kontrolünde listelendiğini görüyoruz.
Projemizi çalıştırdığımızda her iki buton içinde sonucun aynı olduğunu göreceğiz.