C# veri tabanı işlemleri.

Yusefuyn

Yeni üye
5 Şub 2022
17
25
Nesne yönelimli yazılım dillerinde SQL işlemleri en temelde ekleme, silme, güncelleme, Tüm tabloyu almak ve tablodan bir veriyi almak üzere 5 işleme dayanır. Hemen hemen her veritabanı yönetim sistemlerinde sorgu, güncelleme, silme, ekleme cümleleri aynıdır veya çok az değişiklik gösterir.
Bu işlemleri yaparken genel olarak 3 adet objeye ihtiyaç duyulur. Bu objeler “Connection”, “Command” ve “DataReader”.
Connection objesi; Genel anlamda veritabanı ismini ve bağlantı cümlesini içerir.
Command objesi; Genellikle Connection objesini, komutu ve komut içerisinde parametreleri içerir.
DataReader objesi; Command objesinin ExecuteReader fonksiyonu çalıştırıldığında dönen veriyi içerir(Boş DataReader objeniz yerine sorgudan gelen objeleri barındıran, DataReader objesi döndürür).

Veri tabanı sistemlerine göre objelerin isimleri de değişebilir.
Command objesi : SQLiteCommand, MysqlCommand yada SqlCommand vb.
Connection objesi : SQLiteConnection, MysqlConnection yada SqlConnection vb.
DataReader objesi : SQLiteDataReader, MysqlDataReader yada SqlDataReader vb.
DataReader objesini her tablo satırındaki verileri tek tek obje olarak ele alırken kullanılıyor.

Hiç uğraşmayıp tabloyu olduğu gibi DataGridView gibi tablolara aktaracaksanız DataAdapter ve DataSet objeleri kullanabilirsiniz.
Command objesi : DbCommand sınıfından inherit edilmiştir.
DataReader objesi : DbDataReader sınıfından inherit edilmiştir.
Connection objesi : DbConnection sınıfından inherit edilmiştir.

Bir metot yada fonksiyonda yada bir sınıf constructor’unda DbCommand, DbDataReader, DbConnection gibi temel sınıflar parametre olarak istenir ise Parametre olarak SQLite, Mysql, Sql objesi verilebilir ve bu tarz yapılarda hızlı bir veritabanı yönetim sistemi değişikliğine gidilebilir.

ra1ijo3.PNG


Yukarıda görülen kod satırı User tablosundan veri çekiyor. İlk if bloğunda bağlantının kapalı olması durumunda bağlantıyı açmasını Open metodu ile yapıyoruz. Bu Connection Objelerinde var olan bir metottur. SQLiteCommand objesi yenilenirken verilen komut ve bağlantı parametresi DbCommand objesinde yok bu sebepten dolayı diğer objelerde olup olmayacağı VT sistemi yazan kişilere bağlıdır.

SQLiteCommand objenizi yeniledikten sonra objenin CommandText özeliğine komut Connection özelliğine bağlantınızı vererek temel sınıfta doğru kullanım yapar ve her sisteme uygun bir yazılım geliştirmiş olursunuz ama benim VT sistemini değiştirme gereksinimi olmadığından Objeyi yenilerken command ve connection verdim. Sonrada komut objesinin ExecuteReader(); fonksiyonunu çağırdık ve dönen veriyi SQLiteDataReader objesine döndürdük. Sonrada tablodan dönen verinin boş olup olmadığını kontrol ettik. Değil ise While döngüsü ile her satırı Read fonksiyonuyla tek tek okuduk ve her satırdaki da ki sütunnlara ait verileri GetInt32() veya GetString() fonksiyonlarına sütunların sayılarını parametre olarak fonksiyonlara verip okunan verileri aktardık. Sonrada bağlantıyı kapattık.

Verileri almak için veritabanına gönderilen komut SELECT * FROM tabloAdi “Select *” kısmı tüm veriyi getirmesi için “FROM tabloAdi” kısmı hangi tablo olduğunu belirtiyor. ”ORDER BY id ASC” argümanı ise ID sütunundaki sayıları küçükten büyüğe sıralıyor.


mkf7fi1.PNG


Yukarıdaki komut ise user tablosunda “WHERE id=@id” kısmında id’si verilen objeyi güncelliyor.

SET kısmından sonraki argümanlar sütun isimleri ve @ ile belirtilenler ise parametre olarak komuta sonradan ekleniyor. Direk olarak firstName=“TEST” olarak da verilebilir ama bu şekilde yapılır ise SQLInjection yöntemine karşı hiçbir koruma olmaz. Alınan veriyi kontrol eden ve tehlikeli sembolleri kaldıran bir fonksiyon yazılarak da bir nebze olsa koruma sağlanabilir. Sonrada komut objemizin ExecuteNonQuery(); metodu tetikleniyor ve komut veritabanına gönderiliyor.

8jj3mej.PNG


Yukarıdaki komutta ise firstName lastName eMail sütunlarında arama yapıyor ve Name verisine yakın verileri içeren satırlar getiriliyor burada püf nokta verinin başına ve sonuna % karakterinin eklenmesi aksi takdirde direk verinin kendisini arıyor.

c51le1a.PNG


Yukarıdaki komut ile yeni bir veri USER tablosuna ekleniyor. ID sütunu birincil anahtar olduğundan otomatik VT sistemi tarafından atanıyor.

fxl9gy0.PNG


Burada ise id’si verilen parametreye uygun veri USER tablosundan siliniyor.

Bu şekilde temel bir kullanım sağlanabiliyor ama bu yöntem artık yerini Mapping yöntemlerine bırakıyor. Çünkü çok fazla zaman kaybına sebep oluyor. Mapping yöntemi ise kısaca yazılım kısmındaki objenizin özellikleri ile veri tabanındaki tablonuzun sütun isimlerinin uyuşması durumunda hızlı veri ekleme kaldırma güncelleme listeleme işlemleri yapma mantığına dayalı. VT sisteminiz ne olursa olsun belirli paketleri ekleyerek ve birkaç değişiklik yaparak yazılımı başka VT sistemlerine uygun hale getirebiliyorsunuz.

Son olarak Connection objesi SQLite:
pqbuofe.PNG

Mysql:
i6pi068.PNG

Okuduğunuz için teşekkür ederim.
 

N S

Uzman üye
19 Haz 2013
1,142
210
Eline sağlık temel olması ve bilgi için güzel ama gerçek hayatta asla ve asla ado.net kullanmayın mutlaka dapper gibi entity framework gibi orm araçlarını kullanın ve database objelerini mutlaka data transfer objeleriyle birlikte kullanarak application katmanından uzak tutun !
 

Sort

Deneyimli Moderatör
14 Eki 2019
982
88
Ellerine sağlık dostum. Çok güzel bir konuya değinmişsin. Otomasyon yazmak istiyen birinin okuması gereken bir konu. Ancak estetik açıdan biraz eksik kalmış. Başlıklar, ayraçlar ve renklendirme kullanırsan çok daha estetik ve okunabilir bir konu ortaya çıkacaktır. Tekrardan eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.