24 Nisan 2014 Perşembe

Veriyi Yönetmek

                                         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 erişimi ve sorgulama tekniklerini öğreneceğiniz bu modülde uygulama örneklerimiz için “Northwind” veri tabanını kullanacaksınız.     

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.



Hiç yorum yok:

Yorum Gönder