Veritabanı sınıfı yardımıyla veritabanı işlemleri yalnızca birkaç satır ile yapılabilir hale gelecektir. OleDbConnection, OleDbDataAdaptor, OleDbCommand gibi nesneleri sınıf içinde yalnızca bir kere yazarak istenilen uygulamada veritabanı işlemleri rahatlıkla yapılacaktır.
Sık kullanılan veritabanı işlemleri kabaca şu şekilde listelenebilir:
- Tablo çek: SELECT komutu ile kullanılabilir. Bir sınıftaki öğrenci listesi, hiç satılmayan ürünlerin listesi gibi satır ve sütunlardan oluşan, tablo yapısı halinde bir veri çekmek istenildiğinde kullanılan metottur.
- Tek veri çek: SELECT komutu ile kullanılabilir. Sınıftaki öğrenci sayısı, bir öğrencinin adı, tek bir ürünün fiyatı veya benzer kategorideki ürünlerin fiyat toplamı gibi yalnızca tek bir veriye ihtiyaç duyuluyorsa kullanılan metottur.
- Satır oku: SELECT komutu ile kullanılabilir. Veriler üzerinde satır satır ilerlemek üzere kullanılabilen metottur.
- Komut çalıştır: INSERT, UPDATE ve DELETE komutlarıyla birlikte kullanılabilir.
- Prosedür çalıştır: MSSQL’de oluşturulmuş bir saklı prosedürü (stored procedure) çağırmak için kullanılır.
Yukarıda listelendiği gibi, sırasıyla aşağıdaki metotlar sınıfımız içerisinde kullanılmaktadır. Metotlarımızın tamamı, tüm nesneler tarafından görünür olacağı için public tanımlanmıştır. Sınıf içerisinde açıkça görülen bu durum sınıflar detaylandırılırken göz ardı edilecektir. Her metot Parametre tipinde veri kabul eder. Parametre sınıfının içeriği yazının devamında verilmiştir.
1 | DataTable TabloCek(string, [Parametre]) { ... } |
TabloCek() metodu ile DataTable tipinde bir veri döndürülür. Bu metot iki parametre kabul edebilir. İlk parametrenin girilmesi zorunludur ve string tipindedir. İkincisi ise SQL cümlesi içinde kullanılması istenen SQL parametreleri varsa bunun için kullanılmaktadır, Parametre adında bizim yazdığım sınıf tipinde değer alabilir, kullanılması zorunlu değildir. Döndürdüğü değer tipi olan DataTable sayesinde tablo halindeki veriler üzerinde işlem yapılabilir. Ancak istenirse bir sınıftaki öğrenci sayısı, ürünün fiyatı gibi tek veri getirmek için de kullanılabilir. Bu durumda bir satır ve bir sütunluk tablo geri döndürülür. Tüm komutlar Parametre tipinde SQL parametresi kabul eder ancak bu parametrenin kullanılması zorunlu değildir.
1 | string TekVeriCek(string, [Parametre]) { ... } |
TekVeriCek() metodu string tipinde veri döndürür. Tablo yapısına ihtiyaç duyulmadığı durumlarda oldukça kullanışlıdır. string tipte SQL komutu kabul eder, Parametre tipinde SQL parametresi kabul edebilir ancak zorunlu değildir. Yalnızca sınıftaki öğrenci sayısı, tek bir ürünün fiyatı, numarası bilinen bir öğrencinin adı gibi verilerin elde edilmesi gerektiğinde kullanışlıdır.
1 | OleDbDataReader SatirOku(string, [Parametre]) { ... } |
SatirOku() metodu, veriler üzerinde satır satır ilerlememizi sağlayan OleDbDataReader nesnesi tipinde veri döndürür. string tipinde SQL cümlesi, Parametre tipinde SQL parametresi kabul edebilir ancak zorunlu değildir.
1 | int KomutCalistir(string, [Parametre]) { ... } |
KomutCalistir() metodu ile sık kullanılan INSERT, UPDATE ve DELETE gibi SQL komutları çalıştırılır. Etkilenen kayıt sayısı int tipinde döndürülür. Örneğin ürün kategorisi “kırtasiye” olan ürünlere %10 zam yapıldığında 350 gibi kaç kaydın bu sorgu sonucunda etkilendiğini geri döndürür. string tipinde SQL komutu kabul eder, Parametre tipinde SQL parametresi kabul edebilir ancak zorunlu değildir.
1 | object ProsedurCalistir(string, [Parametre], [bool]) { ... } |
ProsedurCalistir() metodu ile MSSQL’de tanımlı stored procedure‘ler çalıştırılabilir. object tipinde veri döndürür. Değer döndürülmesi istenmiyorsa üçüncü parametre boş bırakılabilir, varsayılan değeri false olarak ayarlanmıştır. string tipinde SQL komutunu ilk parametre olarak kabul eder. SQL parametresi kabul eden Parametre tipinde ikinci parametrenin girilmesi zorunlu değildir. Prosedür çalıştırıldıktan sonra dönen verinin elde edilmesi isteniyorsa son parametre true olarak ayarlanmalıdır.
Veritabanı sınıfının bir adet kurucu metodu vardır. Nesne oluşturulurken bağlantı cümlesinin gönderilmesi gerekmektedir. Bağlantı cümlesinin nasıl elde edileceği Veritabanı Bağlantı Cümlesi (ConnectionString) Oluşturma yazısında anlatılmıştır.
Veritabanı Sınıfı
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 99 100 101 102 103 104 105 106 107 108 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OleDb; using System.Data; namespace VeritabaniIslem { public class Veritabani { OleDbConnection baglanti; OleDbDataAdapter daKomut; OleDbCommand komut; DataTable dt; public static string cumle; public Veritabani(string _cumle) { Veritabani.cumle = _cumle; baglanti = new OleDbConnection(Veritabani.cumle); baglanti.Open(); } ~Veritabani() { try { baglanti.Close(); } catch (Exception ex) { } } public DataTable TabloCek(string _komut, Parametre _param=null) { dt = new DataTable(); daKomut = new OleDbDataAdapter(_komut, baglanti); if (_param!=null) daKomut.SelectCommand.Parameters.AddRange(_param.Listele()); daKomut.Fill(dt); return dt; } public string TekVeriCek(string _komut, Parametre _param=null) { komut = new OleDbCommand(_komut, baglanti); if (_param!=null) komut.Parameters.AddRange(_param.Listele()); return komut.ExecuteScalar().ToString(); } public OleDbDataReader SatirOku(string sqlCumle, Parametre _param = null) { komut = new OleDbCommand(sqlCumle, baglanti); if (_param != null) komut.Parameters.AddRange(_param.Listele()); return komut.ExecuteReader(); } public int KomutCalistir(string _komut,Parametre _param=null) { komut = new OleDbCommand(_komut, baglanti); if (_param!=null) komut.Parameters.AddRange(_param.Listele()); return komut.ExecuteNonQuery(); } public object ProsedurCalistir(string _komut, Parametre _param = null, bool degerDondur=false) { if (degerDondur) _komut += ",? OUTPUT"; komut = new OleDbCommand(_komut, baglanti); if (_param != null) komut.Parameters.AddRange(_param.Listele()); if (degerDondur) { OleDbParameter donus = new OleDbParameter("@id", OleDbType.Integer); donus.Direction = ParameterDirection.Output; komut.Parameters.Add(donus); komut.ExecuteNonQuery(); return donus.Value; } else { komut.ExecuteNonQuery(); return null; } } } } |
Parametre Sınıfı
Parametre sınıfının üç farklı kurucu metodu vardır. Değerlerin başlangıçta gönderilmesi zorunlu değildir. string tipinde tek bir parametre alabilir veya veriler nesne oluşturulurken virgüllerle ayrılarak gönderilebilir. Parametre sınıfından nesne türetildikten sonra parametre eklemek ve istenirse bunları listelemek mümkündür.
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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OleDb; namespace VeritabaniIslem { public class Parametre { private List<OleDbParameter> parametre = new List<OleDbParameter>(); public Parametre() { } public Parametre(string veri) { this.Ekle(veri); } public Parametre(params string[] veriDizi) { foreach (var veri in veriDizi) { this.Ekle(veri); } } public void Ekle(string _deger) { parametre.Add( new OleDbParameter("@",_deger)); } public OleDbParameter[] Listele() { return parametre.ToArray(); } } } |