Konu Anlatımı
Veritabanı Bağlantısı ve Veri Okuma
Bir form uygulamasında kullanıcıdan alınan bilgi ekranda kalmaz; onu kalıcı bir yerde saklamak ve sonradan geri okumak gerekir. Bu işin yapıldığı yer veritabanıdır. Konumuzun konusu, arayüz ile veritabanı arasındaki bağlantının kurulması ve veri okuma işleminin doğru kurulmasıdır.
1. Ne Öğreneceğiz ve Ön Bilgi
Bu konuda bir form uygulamasının arayüzünde kullanıcıdan alınan bilgilerin, program içindeki bir ilişkisel veritabanı bağlantısı üzerinden okunmasını ve sonuçların forma taşınmasını öğreneceğiz. Konunun iki ana dayanağı vardır: veritabanı bağlantısı kurmak ve veri okuma işlemini gerçekleştirmek.
Bağlantı, uygulamanın veri tabanı yönetim sistemiyle konuştuğu kanaldır. Bu kanal açılmadan hiçbir sorgu gönderilemez. Veri okuma ise gönderilen sorgunun karşılığında dönen satırları tek tek gezme işidir. Form tasarımını, metin kutusu ve liste kutusu gibi denetimleri, değişkenleri ve döngüleri daha önce gördüyseniz bu konu o parçaları birbirine bağlar.
Ön bilgi olarak metin kutusuna veri yazma, düğmeye tıklandığında kod çalıştırma ve koşul kurma yeterlidir. Veritabanı tarafında ise tablo, satır, sütun ve anahtar kavramlarını tanımak konuyu anlamak için yeterli bir ön bilgidir.
2. Temel Kavramlar ve Sınıflandırma
Bir ilişkisel veritabanı verileri tablolar hâlinde saklar. Tablonun her satırı bir kayıt, her sütunu bir alandır. Sütunun veri tipi, o alanda saklanabilecek değerin türünü belirler. Tablolar arasındaki ilişki birincil anahtar ve yabancı anahtar ile kurulur; birincil anahtar bir satırı benzersiz olarak tanımlar ve aynı değerin iki kez yazılmasına izin vermez.
Bağlantı dizesi, programın veritabanına ulaşmak için ihtiyaç duyduğu bilgileri taşıyan bir metindir. Bu metinde sunucu adı, veritabanı adı, kimlik doğrulama biçimi ve gerekiyorsa kullanıcı bilgileri bulunur. Bağlantı dizesi doğru kurulmazsa program veriye hiç ulaşamaz.
Veri okuma tarafında üç temel nesne kullanılır. Bağlantı nesnesi kanalı açar ve kapatır, komut nesnesi sorgu metnini taşır, veri okuyucu ise dönen sonuç kümesini satır satır okunabilir hâle getirir.
- Dosya tabanlı yaklaşımda veri dosyası doğrudan uygulamanın yanındadır; kurulum kolaydır.
- Sunucu tabanlı yaklaşımda veri ayrı bir sunucuda durur ve bağlantı dizesiyle ulaşılır.
- Parametreli sorguda değerler komut metnine gömülmez, ayrı parametre olarak gönderilir.
Parametreli sorgu kullanmak hem güvenlik hem de doğruluk açısından önemlidir. Kullanıcının yazdığı metin doğrudan sorguya katıştırılırsa komutun yapısı bozulabilir; buna komut enjeksiyonu denir.
| Bağlantı dizesindeki bilgi | Ne işe yarar |
| Sunucu adı | Veri tabanının bulunduğu makineyi belirtir |
| Veritabanı adı | Hangi veri kümesine bağlanılacağını belirtir |
| Kimlik doğrulama biçimi | Bağlantının güvenli kurulup kurulmayacağını belirtir |
| Kullanıcı bilgisi | Sunucuya tanıtılan hesap bilgisidir |
3. Basit Örnek ve Adım Adım Çözüm
Örnek: Bir kayıt ekranında kullanıcı öğrenci numarasını yazıp düğmeye bastığında öğrencinin adını ve sınıfını göstermek istiyor. Bu işin adımları şöyledir.
- Form yüklenirken bağlantı nesnesi oluşturulur ve bağlantı dizesi atanır.
- Düğmenin tıklandığı olayında metin kutusundaki numara parametre olarak sorguya verilir.
- Komut çalıştırılır ve veri okuyucu üzerinden sonuç kümesi gezilir.
- Okunan satırdaki ad ve sınıf alanları ilgili metin kutularına yazılır.
- Okuma bittikten sonra veri okuyucu ve bağlantı nesnesi kapatılır.
4. İleri Örnek ve Saha Uygulaması
Saha uygulamasında bir öğrenci kayıt formu düşünün. Bu formda liste kutusu, arama kutusu, kayıt sayısını gösteren bir etiket ve verileri yenileyen bir düğme bulunur. Liste kutusu boşsa kullanıcıya uyarı gösterilir. Arama kutusuna yazılan ada göre sonuçlar süzülür. Kullanıcı bir kaydı seçtiğinde ayrıntı alanlarına bilgiler taşınır.
Tüm bu akışta bağlantı her sorgu için yeniden kurulmak zorunda değildir; bir kez açılıp işin sonunda kapatılabilir. Bir sorgunun yalnız ihtiyaç duyulan alanları getirmesi de önemlidir. Tüm sütunları çekmek yerine gereken alanları seçmek, hem taşınan veri miktarını hem de ekranda işlenecek kayıt sayısını azaltır.
Sonuç kümesi çok büyükse sayfalama komutlarıyla liste üzerinde adım adım gezinme sağlanır. İlk kayda gitme, son kayda gitme ve bir sonraki kayda gitme komutları bu gezinmeyi mümkün kılar. Sütun sayısını azaltmak ve koşul yazmak dönen satır sayısını düşürdüğü için çalışma süresini de kısaltır.
5. Karşılaştırma Tablosu ve Denetim
Veri okuma tarafında iki yaklaşım sık karşılaştırılır. Her komutta açılıp kapatılan bağlantı ile bir kez açılıp birden çok komutta kullanılan paylaşılan bağlantı, farklı durumlarda avantajlıdır.
| Özellik | Her komutta açılan bağlantı | Bir kez açılıp paylaşılan bağlantı |
| Açma işlemi | Her sorgudan önce yapılır | Form açılışında bir kez yapılır |
| Kapatma işlemi | Her sorgudan sonra yapılır | İş bitiminde bir kez yapılır |
| Kaynak kullanımı | Çok sayıda açma kapatma olayı üretir | Kaynak ömrü boyunca korunur |
| Uygun olduğu durum | Tek seferlik rapor okumaları | Ardışık sorgular içeren formlar |
Denetim sırası önemlidir. Önce bağlantı dizesinin doğru yazılıp yazılmadığına bakılır, sonra sorgunun kendisi denetlenir, en sonunda dönen kayıt sayısına göre form güncellenir. Denetim yapılmadan boş bir liste kutusuna kayıt eklenmeye çalışılırsa program hata verir.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
En sık görülen hata, bağlantıyı açıp kapatmayı unutmaktır. Uzun süre açık kalan bağlantılar kaynak tüketir ve çok sayıda kullanıcı bağlandığında yeni bağlantı kurulamaz hâle gelir. İkinci sık hata, okunan veriyi döngü kurmadan almaya çalışmaktır; döngü kurulmazsa ekrana hiçbir kayıt gelmez. Üçüncü hata ise sorgu bitmeden bağlantıyı kapatmaktır; bu durumda veri okuyucu bozulur ve hata mesajı çıkar.
Özetle veritabanı bağlantısı bağlantı dizesiyle kurulur, veri okuma komutu satır kümesi getirir ve bu küme veri okuyucu ile gezilir. Değerler parametreyle gönderilir, bağlantı iş sonunda mutlaka kapatılır. Kendini dene: Küçük bir tablo oluşturup arayüzde iki öğrenciyi listeleyen bir form yap, sonra sorguyu parametreli hâle getirerek ada göre arama özelliği ekle.