S
|St_AnGeR|
Guest
Veritabanı kullanmanın programcılar açısından birçok faydaları vardır. Veritabanı kullanmadan önce programlar dosyaların rastgele yada sıralı bir şekilde okunması esasına dayanarak genellikle bilgiyi saklardı. Bunun getirdiği problemler daha sonra verinin içerisinde saklanabildiği ve veriye erişimin uygulamadan bağımsız olarak sağlandığı veritabanı tekniğini gündeme getirmiştir. Bu makale ile veriyi dosyada tutmak ile veriyi veritabanında tutmanın getirdiği arasındaki farklar ve faydaları ile Visual C++ ile veritabanı programcılığı nasıl yapılır konuları ele alınacaktır.
Veritabanı kullanmanın programcılar açısından birçok faydaları vardır. Veritabanı kullanmadan önce programlar dosyaların rastgele yada sıralı bir şekilde okunması esasına dayanarak genellikle bilgiyi saklardı. Bunun getirdiği problemler daha sonra verinin içerisinde saklanabildiği ve veriye erişimin uygulamadan bağımsız olarak sağlandığı veritabanı tekniğini gündeme getirmiştir. Bu makale ile veriyi dosyada tutmak ile veriyi veritabanında tutmanın getirdiği arasındaki farklar ve faydaları ile Visual C++ ile veritabanı programcılığı nasıl yapılır konuları ele alınacaktır.
Bu makaleye başlamadan önce isterseniz veritabanı ile ilgili bu makalede kullanılacak olan kavramları açıklayayım.
Veritabanı: Birbirleri ile ilişkilendirilmiş yada bağlantılı bilgi topluluğuna kısaca veritabanı diyoruz.
Veritabanı Yönetim Sistemi: Veritabanları üzerinde işlem yapma olanağı sağlayan yazılımlara denir.
Veritabanı yönetim sistemine verilebilecek en güzel örnekler MS Access,MS SQL Server, Mysql dir. Veritabanı programcılığından önce uygulamalar bilgiyi sabit diskte tutabilmek için dosyalar kullanıyorlardı. Uygulamalar bilgiyi çekebilmek için ya sıralı bir şekilde dosyayı baştan sona okumak zorundaydılar yada dosyaya rastgele erişim yapmak durumundaydılar. Aşağıda veritabanı programcılığının getirdikleri ve dosya ile programlama yapmanın zorlukları istelenmiştir:
Veritabanları kendi tanımlarını kendi içlerinde Meta Data olarak tutarlar. Bu verinin uygulamadan bağımsız olarak tutulmasını sağlamaktadır. Dosya ile programlamada ise dosya yapısı uygulama tarafından bilinmek durumundadır. Dosya yapısı değiştiğinde o dosyanın önceki halini kullanan uygulamalar çalışmaz hale gelir.
Veritabanları birden fazla uygulamada meydana gelen karışıklıkları çözebilmek için gelen görevleri belli bir sıra ile uygulamaya alırlar. Dosya ile programlama da ise bir program tarafından yapılan değişiklik aynı anda diğer bir program tarafından yapılan değişikliğin üzerine yazar.
Veritabanında bilgiler değişik şekillerde görüntülenebilir. (Views) Değişik kullanıcılar için değişik görüşler oluşturulabilir. Bu verinin değişik şekillerde sunulması anlamına gelir. Dosya ile programlama da ise verinin bir görüntüsü vardı ve bu hakkı olan herkes için aynı şekilde gözükür.
Bu karşılaştırmalara daha çok şeyler eklenebilir. Uygulamalarda veritabanı yönetim sistemi kullanmanın getirdikleri ise aşağıdaki gibidir:
Gereksiz bilginin tutlmasını kontrol eder
Yetkisiz kullanıcıların veriye erişimini engeller
Farklı kullanıcılar için farklı arayüzler sağlar
Verinin belirli kurallara ve yapıya uymasını zorlar
Veri kaybını en aza indirmek için (recovery) geri dönüşüm ve yedekleme (backup) araçları sağlar
Bu faydalar daha arttırılabilir. Bir sonraki bölümde ise bir veritabanı yönetim sistemi olan MS SQL Server ile Visual Studio C++ arasındaki bağlantılar nasıl yapılır, veri üzerinde değişiklikler nasıl gerçekleştirilir, yeni bilgi nasıl eklenir yada varolan bilgi nasıl güncellenir gibi konular ele alınacaktır.
MS SQL Server Ve Visual Studio C++
Microsoft Visual Studio C++ .Net ile veritabanı programlaması yapabilmek için öncelikle hangi namespace leri kullanacağınızı bilmeniz ve bunları projenize dahil etmeniz gerekmektedir. Bu örnek projede kullanılacak olan namespace System:
ata::SqlClient dir. Bu projede bir sql sunucusuna bağlanacak ve bu sql sunucusundan verileri çekip form üzerinde görüntüleyeceğiz. Öncelikle bu namespace altında bulunan SqlConnection class ını kullanarak sql sunucusuna bağlanmamız gerekiyor. Bu class ın tanım cümleciği aşağıda verilmiştir:
Burada hangi sunucudan hangi kullanıcı adı ve şifresiyle hangi veritabanından bilgiyi alacağımızı belirtiyoruz. Buna göre sunucu karahasan, veritabanı tutorial ve kullanıcı ise sa veritabanı kullanıcısıdır. Bunun ardından verileri veritabanında çekebilmek için bir SqlCommand class ına ihtiyacınız var. Bu class üyesini aşağıdaki gibi oluşturabilirsiniz:
Bir komut class ı oluşturuken hangi veritabanı connection nesnesini kullanacağını ve hangi tabloyu kullanacağı gibi bilgilerin girilmesi gerekmektedir. Bizim yaptığımız tanımlamaya göre conn nesnesinin bağlı olduğu sunucuyu kullanacağız ve yukarıda verilen SQL cümleciğinden de anlaşıldığı üzere Workers tablosunu kullanacağız.
Veritabanı bağlantı nesnesi ve komutunu oluşturduktan sonra veriler üzerinde hareket etmemizi sağlayan SqlDataReader class ına geldi sıra. Bunun tanımlaması da aşağıda verildiği gibi yapılablir:
System:
ata::SqlClient::SqlDataReader* myreader;
Şimdi oluşturduğumuz bu nesnelerin yardımıyla veritabanından nasıl bilgi okuyacağız. Oncelikle veritabanın açmamız gerekiyor. Bunun için oluşturduğumuz bağlantı nesnesinin Connect metodunu kullanabiliriz. Daha sonra verileri almak için komut nesnesinin ExecuteReader metodunu kullanmalıyız. Bilgi üzerinde hareket etmek içinse myreader nesnesinin Read() metodunu kullanmalıyız. Bu bölümde anlatılanlara ilişkin kodlar aşağıda verilmiştir.
şimdi sizlere oluşturduğum programı ve veritabanı tasarımını göstermek istiyorum. Veritabanı tasarımı bir tablodan ibaret olup tanımı aşağıda verildiği gibidir
Şekil 1- Veritabanı Workers Tablosu Tanımı
Şekil 2- Program Giriş Arayüzü
Program ilk açıldığında şekil 2 ‘deki gibi bir ekran gelmektedir. Buradan öncelikle bağlan butonuyla veritabanına bağlantı sağlanmalı ve tüm nesneler ilk değerlerine atanmalıdır. Daha sonra veritabanında bulunan kullanıcılar arasında ilerlemek için Sonraki butonu kullanılmalıdır. Programdan çıkılmak istendiğinde ise mutlaka çıkış butonu kullanılmalıdır. Böylelikle veritabanı bağlantısının kesinlikle kapanmış olduğundan emin olunur. Programın ilk veriyi çektikten sonraki hali şekil 3’te verilmiştir.
Veritabanı kullanmanın programcılar açısından birçok faydaları vardır. Veritabanı kullanmadan önce programlar dosyaların rastgele yada sıralı bir şekilde okunması esasına dayanarak genellikle bilgiyi saklardı. Bunun getirdiği problemler daha sonra verinin içerisinde saklanabildiği ve veriye erişimin uygulamadan bağımsız olarak sağlandığı veritabanı tekniğini gündeme getirmiştir. Bu makale ile veriyi dosyada tutmak ile veriyi veritabanında tutmanın getirdiği arasındaki farklar ve faydaları ile Visual C++ ile veritabanı programcılığı nasıl yapılır konuları ele alınacaktır.
Bu makaleye başlamadan önce isterseniz veritabanı ile ilgili bu makalede kullanılacak olan kavramları açıklayayım.
Veritabanı: Birbirleri ile ilişkilendirilmiş yada bağlantılı bilgi topluluğuna kısaca veritabanı diyoruz.
Veritabanı Yönetim Sistemi: Veritabanları üzerinde işlem yapma olanağı sağlayan yazılımlara denir.
Veritabanı yönetim sistemine verilebilecek en güzel örnekler MS Access,MS SQL Server, Mysql dir. Veritabanı programcılığından önce uygulamalar bilgiyi sabit diskte tutabilmek için dosyalar kullanıyorlardı. Uygulamalar bilgiyi çekebilmek için ya sıralı bir şekilde dosyayı baştan sona okumak zorundaydılar yada dosyaya rastgele erişim yapmak durumundaydılar. Aşağıda veritabanı programcılığının getirdikleri ve dosya ile programlama yapmanın zorlukları istelenmiştir:
Veritabanları kendi tanımlarını kendi içlerinde Meta Data olarak tutarlar. Bu verinin uygulamadan bağımsız olarak tutulmasını sağlamaktadır. Dosya ile programlamada ise dosya yapısı uygulama tarafından bilinmek durumundadır. Dosya yapısı değiştiğinde o dosyanın önceki halini kullanan uygulamalar çalışmaz hale gelir.
Veritabanları birden fazla uygulamada meydana gelen karışıklıkları çözebilmek için gelen görevleri belli bir sıra ile uygulamaya alırlar. Dosya ile programlama da ise bir program tarafından yapılan değişiklik aynı anda diğer bir program tarafından yapılan değişikliğin üzerine yazar.
Veritabanında bilgiler değişik şekillerde görüntülenebilir. (Views) Değişik kullanıcılar için değişik görüşler oluşturulabilir. Bu verinin değişik şekillerde sunulması anlamına gelir. Dosya ile programlama da ise verinin bir görüntüsü vardı ve bu hakkı olan herkes için aynı şekilde gözükür.
Bu karşılaştırmalara daha çok şeyler eklenebilir. Uygulamalarda veritabanı yönetim sistemi kullanmanın getirdikleri ise aşağıdaki gibidir:
Gereksiz bilginin tutlmasını kontrol eder
Yetkisiz kullanıcıların veriye erişimini engeller
Farklı kullanıcılar için farklı arayüzler sağlar
Verinin belirli kurallara ve yapıya uymasını zorlar
Veri kaybını en aza indirmek için (recovery) geri dönüşüm ve yedekleme (backup) araçları sağlar
Bu faydalar daha arttırılabilir. Bir sonraki bölümde ise bir veritabanı yönetim sistemi olan MS SQL Server ile Visual Studio C++ arasındaki bağlantılar nasıl yapılır, veri üzerinde değişiklikler nasıl gerçekleştirilir, yeni bilgi nasıl eklenir yada varolan bilgi nasıl güncellenir gibi konular ele alınacaktır.
MS SQL Server Ve Visual Studio C++
Microsoft Visual Studio C++ .Net ile veritabanı programlaması yapabilmek için öncelikle hangi namespace leri kullanacağınızı bilmeniz ve bunları projenize dahil etmeniz gerekmektedir. Bu örnek projede kullanılacak olan namespace System:
Kod:
SqlConnection* conn= new SqlConnection("server=Karahasan; database=Tutorial ; uid=sa;pwd=etst ");
Burada hangi sunucudan hangi kullanıcı adı ve şifresiyle hangi veritabanından bilgiyi alacağımızı belirtiyoruz. Buna göre sunucu karahasan, veritabanı tutorial ve kullanıcı ise sa veritabanı kullanıcısıdır. Bunun ardından verileri veritabanında çekebilmek için bir SqlCommand class ına ihtiyacınız var. Bu class üyesini aşağıdaki gibi oluşturabilirsiniz:
Kod:
SqlCommand* mycommand= new SqlCommand("Select * from Workers",conn);
Bir komut class ı oluşturuken hangi veritabanı connection nesnesini kullanacağını ve hangi tabloyu kullanacağı gibi bilgilerin girilmesi gerekmektedir. Bizim yaptığımız tanımlamaya göre conn nesnesinin bağlı olduğu sunucuyu kullanacağız ve yukarıda verilen SQL cümleciğinden de anlaşıldığı üzere Workers tablosunu kullanacağız.
Veritabanı bağlantı nesnesi ve komutunu oluşturduktan sonra veriler üzerinde hareket etmemizi sağlayan SqlDataReader class ına geldi sıra. Bunun tanımlaması da aşağıda verildiği gibi yapılablir:
System:
Şimdi oluşturduğumuz bu nesnelerin yardımıyla veritabanından nasıl bilgi okuyacağız. Oncelikle veritabanın açmamız gerekiyor. Bunun için oluşturduğumuz bağlantı nesnesinin Connect metodunu kullanabiliriz. Daha sonra verileri almak için komut nesnesinin ExecuteReader metodunu kullanmalıyız. Bilgi üzerinde hareket etmek içinse myreader nesnesinin Read() metodunu kullanmalıyız. Bu bölümde anlatılanlara ilişkin kodlar aşağıda verilmiştir.
Kod:
conn->Open();
myreader=mycommand->ExecuteReader() ;
while(myreader->Read()){
textBox1->Text=myreader->GetString(0);
}
şimdi sizlere oluşturduğum programı ve veritabanı tasarımını göstermek istiyorum. Veritabanı tasarımı bir tablodan ibaret olup tanımı aşağıda verildiği gibidir

Şekil 1- Veritabanı Workers Tablosu Tanımı

Şekil 2- Program Giriş Arayüzü
Program ilk açıldığında şekil 2 ‘deki gibi bir ekran gelmektedir. Buradan öncelikle bağlan butonuyla veritabanına bağlantı sağlanmalı ve tüm nesneler ilk değerlerine atanmalıdır. Daha sonra veritabanında bulunan kullanıcılar arasında ilerlemek için Sonraki butonu kullanılmalıdır. Programdan çıkılmak istendiğinde ise mutlaka çıkış butonu kullanılmalıdır. Böylelikle veritabanı bağlantısının kesinlikle kapanmış olduğundan emin olunur. Programın ilk veriyi çektikten sonraki hali şekil 3’te verilmiştir.