VERİYİ YÖNETMEK
Veri Sorgulama
Günümüz uygulamaları ister masaüstü ister web
tabanlı olsun mutlaka bir veri tabanı (database) yazılımı kullanmak
zorundadırlar. Çünkü çağımızda bilgi ve bilgiye erişim çok önemli bir rol
oynamaktadır. Bir amaç etrafında verileri topluyoruz, sorguluyoruz, bir sonuca
ulaşmak için onları işleyip raporlar elde ediyoruz. Çünkü geleceği tahmin etmek
istiyoruz. Bu sebepten dolayı bilgisayar programları da, çeşitli bilgileri
saklamak, düzenlemek ve tekrar saklamak zorundadır.
Uygulama geliştiriciler ise bu veriler
etrafında her zamankinden daha hızlı, esnek, ölçeklenebilir, yüksek
erişilebilirlik değerlerine sahip ve performanslı çözümler oluşturmak
durumundadırlar.
İşte bu gereksinimlerin karşılığı olarak .Net
uygulama geliştiricilere ADO.NET adı verilen ve uygulamanız ile sahip olduğunuz
verilerin saklandığı veri tabanı sisteminize erişimde bulunmanıza ve üzerinde
işlem yapmanıza olanak sağlayan bir teknoloji sunmaktadır. ADO.NET (ActiveX
Data Object) eski nesil ADO veri erişim teknolojisinin .NET için yeniden
tasarlanmış halidir. .NET Framework’un bir parçası olarak 1.0 sürümünden beri
önemli bir yere sahiptir.
Northwind Veri Tabanı
Veri bazlı uygulamalar geliştirmede deneysel amaçlı ele
alınmış “Nortwind” şirketi müşterilerine yiyecek ve içecek ürünleri satan
hayali bir şirkettir. “Northwind” veri tabanı ise şirketin sattığı ürünler
(products), müşteriler (customers), müşterilerin verdiği siparişler (orders),
faturalar, tedarikçiler (suppliers), ürünlerin teslim edilmesinde kullanılan
nakliyeciler (suppliers) ve şirket için çalışan personel (employees)
bilgilerinin tutulduğu ilişkili tabloları (table) görünümleri (view) ve saklı
yordamları (stored procedure) barındırır.
Veri Tabanı Oluşturma
Northwind
veri tabanı için gerekli dosyaları;
http://www.microsoft.com/en-us/download/details.aspx?id=23654
adresinden temin edebilirsiniz.
Yüklemesi yapılan “SQL2000SampleDb.msi” isimli
programı çalıştırdığınız taktirde dosyalarının oluşturulduğunu göreceksiniz. Bu
aşamadan sonra yapılması gereken bilgisayarınızda yüklü bulunan SQLServer
örneğine (instance) Northwind veri tabanını kayıt etmek olacaktır.
Gereken işlem adımları
·
Windows Başlat menüsü altında “cmd” yazarak konsol ortamına geçiniz.
·
Konsol ekranında “>cd SQL Server 2000 Sample Databases” komutunu
veriniz.
·
“>osql –E –S
ComputerName\InstanceName –i instnwnd.sql” komutunu uygulayınız. Komut içinde
geçen “ComputerName” kurulumun yapıldığı bilgisayar adı “InstanceName” ise
bilgisayarınızda kurulu olan SQL Server’ın adı olarak yazmalısınız.
·
Veri Tabanıyla Bağlantı Oluşturma
Veri tabanına
bağlanmada ADO.NET size “System.Data” isimli alanı içinde bir takın hizmet
sınıfları sunmaktadır. “System.Data” isim alanı aynı zamanda oldukça geniş bir
sağlayıcı kümesini de içinde barındırır. Bu sayede farklı platformlara ait
(Oracle,MySQL,Acces vb.) veri kaynaklarına bağlanabilme imkanı sağlar.
Böylece farklı veri kaynaklarını tek bir
uygulamada toplayabilir ve hatta birbirleri ile konuşturabilirsiniz.
ADO.NET uygulama geliştiricilere 4 farklı isim alanı farklı veri kaynaklarına bağlanabilme imkanı sunmaktadır.
System.Data.SqlClient
MS SQL Server ile çalışabilmek için yazılmış
tiplerin yer aldığı bu isim alanı, SQL Server 7.0 ve sonraki versiyonları ile
kullanılabilmektedir.
System.Data.OleDB
MS SQL Server 6.5 ve önceki sürümleri,
Microsoft Access, Oracle, Microsoft Excel dosyaları gibi OleDB arayüzüne sahip
tüm sistemler ile bağlantı kurmak için gerekli hizmet sınıflarını
barındırmaktadır.
System.Odbc
ODBC (Open Database Connectivity)
standartlarını destekleyen ve ODBC sürücüsü bulunan sistemlere bağlantı kurmayı
sağlayan hizmet sınıflarını barındırmaktadır.
System.Data.Oracle
Hangi ilişkisel veri tabanı yönetim sistemi ile bağlantıya geçmek ve üzerinde işlem yapmak istiyorsanız öncelikle ilgili veri sağlayıcısına (provider) ait isim alanını kod satırlarınızın başında “using” deyimi ile dahil etmelisiniz.Bağlanmak istediğiniz veri tabanı yönetim sistemine ait ilgili sağlayıcı (provider) üzerinden bağlantı nesnesinin örneklenmesi ilk aşamadır belirtilebilir.
.Net 2.0’dan sonra Oracle veri yönetim sistemine daha güçlü destek sağlanmıştır.Ancak Oracle veri sağlayıcısını kullanabilmek için öncelikle “System.Data.OracleClient” referansının proje referansları arasına dahil edilmesi gerekmektedir.
xxxConnection sınıfı
üzerinde örnekleme yapılırken kurucu parametresi olarak verilebilir.
Bağlantı sınıfı üzerinden elde edilen nesnenin
.ConnectionString isimli string türünden parametresi ile bildirilebilir.
Bağlantı bilgisi
metinsel (string) türünden olup ve buna bağlı belirli kurallara göre yazılır.
Verileri Sorgulama
Daha önceden veri tabanına kurulmuş olan
bağlantı üzerinden verileri çekmek, eklemek, silmek, güncellemek gibi sorgulama
işlemlerinizi yürütmek amacıyla ilgili sağlayıcıya ait “Command” sınıfını
kullanmanız gerekmektedir. Bu sınıf ile SQL sorgularınızı veri tabanına
yollayabilir, veri tabanı üzerinde yer alan saklı yordamlarınızı (Stored
Procedure) çalıştırabilir, parametrik yapıdaki sorgularınız için parametre
tanımlaması yapabilirsiniz.
“Command” sınıfına
ait en çok kullanılan özellik ve metodlar aşağıda verilmiştir.
Bağlantıyı
Kapatma
Açılmış bir bağlantı
işlem bittiğinde muhakkak kapatılmalıdır. Bunun sebebi veri tabanının açık
bırakılan her bağlantı için kendi sistemi üzerinde ek sistem kaynağı tüketimini
gerçekleştiriyor olmasıdır. Söz konusu veri tabanı üzerinde birden fazla
uygulama ağ (network) üzerinden işlem yapmaya çalışması ve her biri için açık
bırakılan bağlantılar doğal olarak sisteme ek yük getirecek ve bu da sunucunun
sorgulama için kullanacağı önemli sistem kaynaklarını aynı zamanda bağlantı
trafiğine de harcamasını gerektirecektir.
Sorgunuzu yürütmeden
hemen önce veri tabanı açılmalı ilgili verilerin alınmasından hemen sonra
kapatılması doğru davranış olacaktır.
“Command” sınıfına ait yürütme metodlarına
“System.Data.CommandBehaviour” parametresi verilebilir. Bu parametre
“DataReader” nesnesi kapandığında kullandığı bağlantıyı otomatik olarak
kapatılacağı bilgisi verir. Bunu bağlantı nesnesine ait “Close()” metodu kullanmaktan
farklı bir yol olarak düşünebilirsiniz. Kullanım şekli;
rd =
komut.ExecuteReader(CommandBehavior.CloseConnection);
DLINQ Kullanarak Veri Tabanını Sorgulama
LINQ (Language
Integrated Query) “IEnumarable” arayüzüne sahip numaralandırılabilir koleksiyon
tiplerini hafızada sorgulamak maksadıyla SQL benzeri söz dizimine sahip bir
programlama tekniği sunar. Dile entegre edilmiş sorgu anlamını taşır.
Programlama dili
tasarımcıları bu konuda daha az miktarda kod ve daha kolay okunulabilir bir
tarzda yazım imkanı sunan LINQ projesini geliştirmiştir. LINQ gerek ana fikri
gerekse kullandığı dili SQL’e oldukça benzer ve aynı avantajlar sunar.
DLINQ (Database LINQ)
yada diğer adı LINQ to SQL (SQL için LINQ) SQL ile veri tabanı üzerinde
yapabileceğiniz sorgulama işlemlerini LINQ kodu olarak .NET ortamında
düzenlemenize imkan tanır.
DataContext
Sınıfı
“DataContext” sınıfı uygulamanızın çatısı
altında tanımladığınız varlık sınıfları ile veri tabanında yer alan
tablolarınız arasındaki bağlantıları yöneterek ve veri akımlarını her iki yapı
arasında sağlamakla görevli hizmet sınıfıdır. “System.Data.LINQ” isim alanında
yer alır.
VERİ İŞLEMLERİ
Çeşitli
yazılım geliştirme platformları tarafından üretilmiş ilişkisel nesne
haritalaması (Object / Relational Mapping – O/RM) araçları mevcuttur, bunlardan
birkaçı aşağıda verilmiştir;
.NET
platformu: NHibernate, DLINQ, EntityFramework
JAVA platformu için : JPA, Hibernate, TopLink,
iBatis
Açık Kaynaklı (Open Source) : Business Lojic
Toolkit, Euss, LLBLGen
DLINQ İle Veri
Bağlama
DLINQ
size veri tabanı varlık nesnelerini oluşturmada, kullanmada, seçme, ekleme,
silme, güncelleme işlemlerini birer metot olarak sunmada ve bütün bunları basit
bir sihirbaz yardımı ile grafik ortamda hızlı olarak gerçekleştirmenize imkan
veren küçük ve orta ölçekli yazılım projeleriniz için bir O/RM tasarım aracı
sunar.
DLINQ’nun
veri erişim katmanı (data access layer) olarak kullanmak için aşağıdaki işlem
adımlarını takip ediniz.
Öncelikle Visual Studio ortamında yeni bir WPF
uygulaması (WPFApplication)
oluşturunuz.
Solution
Explorer paneli içinde uygulama adı üzerinde fare sağ tuş-Add-New Item seçimini
yapınız.
Ekrana gelen “New Item” penceresinden “LINQ to
SQL Classes” seçiniz. Name kısmına üretilecek .dbml uzantılı dosyaya vermek
isteğiniz ismi yazınız. Bu uygulamada “NorthwindDataClasses” örnek ismi
verilmiştir. Ekle (Add) butonuna basınız.
DLINQ’nun veri erişim
katmanı (data access layer) olarak kullanmak için aşağıdaki işlem adımlarını
takip ediniz.
1.Öncelikle Visual
Studio ortamında yeni bir WPF uygulaması (WPF Application) oluşturunuz.
2.Solution Explorer
paneli içinde uygulama adı üzerinde Mouse sağ tuş > Add > New Item
seçimini yapınız.
3.Ekrana gelen “New
Item” penceresinden “LINQ to SQL Classes” seçiniz. Name kısmında üretilecek
.dbml uzantılı dosyaya vermek istediğiniz ismi yazınız. Bu uygulamada
“NortwindDataClasses” örnek ismi verilmiştir. Ekle (Add) butonuna basınız.
Ekrana
“NortwindDataClass.dbml” dosyasına ait içi şu an boş olan bir grafik tasarım
penceresi gelecektir.
Nortwind veri tabanı
tablolarını grafik ekran üzerinde oluşturmak için öncelikle sunucu ile bağlantı
kurmalısınız.”Server Explorer” panelinde “Data Connections” öğesi üzerine Mouse
sağ tuş >”Add Connection” seçimini yapınız. Sunucu adı (Server Name) ve veri
tabanı adı (database name) bilgilerini girdikten sonra “Tamam” butonuna
basınız.
Server
Explorer penceresinden ulaştığınız “Northwind” veri tabanı tablolarını
uygulamanızın “NortwindDataClass.dbml” dosyasının içine sürükleyiniz.
DLINQ için isim alan bildirimlerinin
yapıldığını “Northwind” veri tabanı isimlendirme nitelemesinin hemen altında
“DataContext” sınıfından kalıtılmış olarak oluşturulan “NorthwindDataContext”
isimli bir sınıfın oluşturulduğunu görelebilirsiniz. Bu sınıf “Northwind” veri
tabanının şablonudur.
WPF’in en güçlü
taraflarından biri olarak görülen bu mekanizmaya veri bağlama (Data Binding)
adı verilir ve tamamen “INotifyPropertyChanged” ve “INotifyPropertyChanged”
arayüzlerine borçludur.
DLINQ İle Veri
Güncelleme
Varlık nesneleri uygulamanın çalışma
sürecinde hafızada yer alır. Bunlar üzerinde yapmış olduğunuz değişiklik veri
tabanı tarafından algılanmaz. Yapılan değişikliklerin veri tabanı tarafına
geçirilmesini istiyorsanız veri tabanı nesnesi “SubmitChanges()” metodunu
çağırmanız yeterlidir. Bu metod kayıtların veri tabanı üzerinde
güncellenebilmesi için SQL sorgusu oluşturur ve veri tabanına uygulatır.
Örnek:
1 numaralı ürünün
adını “Chains1” olarak güncelleyiniz.
Öncelikle
“NorthwindDataClassDataContext” sınıfı üzerinden “context” nesnesi örneklemesi
yapmalısınız.
Ardından güncellenmek istenen kayıt bilgisi LINQ sorgusu ile
getirilmelidir. Ürün numarası (ProductID) 1 olan kaydı (Single) “Product”
tipindeki ürün nesnesine verilmiştir. Sonuçta elde edilen ürünün ismi
(ProductName) “Chains1” olarak yeniden düzenlenmiş ve yapılan güncelleme işlemi
“SubmitChanges()” metodu ile context nesnesi aracılığı ile veri tabanına
uygulatılmıştır.
“DataContext” nesnesi üzerinde yapılan ve veri
tabanına güncellenmemiş değişiklikleri eski haline getirmek için “Refresh()”
metodunu aşağıda verildiği şekilde kullanabilirsiniz.
Veri Ekleme ve
Silme
DLINQ ile varlık koleksiyonu üzerine yeni bir
öge ekleyebilir veya çıkarabilirsiniz. Yeni bir öge eklemek için ilgili
koleksiyonun “InsertOnSubmit()” metodu çıkarmak için “Remove()” metodu kullanılır.
Örnek:
“Oruvar Exp” adında
yeni bir nakliyeci kaydı yapınız.
Eklenecek olan kayıt
ait olacağı varlığın tipinde bir örneği “new” yapıcısı ile oluşturulur. Varlık
nesnesine ait özelliklere (property) yeni kayıt bilgileri verilir. İlgili
varlık koleksiyonunun “InsertOnSubmit()” metoduna parametre verilmek suretiyle
ekleme işlemi gerçekleştirilir.
Örnek:
“Oruvar Exp” adındaki nakliyecinin kaydınız siliniz.
Öncelikle silinecek
kayıt varlık setinden LINQ sorgusu ile elde edilir. İlgili varlık
koleksiyonunun “DeleteOnSubmit()” metoduna parametre olarak verilmek suretiyle
silme işlemi gerçekleştirilir.
Ekleme
ve silme işlemlerinin ardından “SubmitChanges()” metodu “context” nesnesine
uygulanarak değişiklikler veri tabanına uygulatılır.