S
|St_AnGeR|
Guest
Bu yazıda Mono projesi bünyesinde C# ile sıfırdan yazılmış yerel mySQL sürücülerini C++.NET aracılığı ile ihtiyacımız olduğunda nasıl kullanabileceğimizi görücez.
Öncelikli olarak mySQL 'e erişim konusunda ihtiyacımız olabilecek araçları nerden sağlayabiliriz.
( İlgili adreslerden indiriceğiniz tüm uygulamalar GPL lisansı altındadır ve ücretsizdir. )
mySQL: http://dev.mysql.com/downloads/
mySQL Administrator: http://dev.mysql.com/downloads/administrator/
mySQL Editor: http://www.mysqlfront.de/download.html
mySQL ADO.NET Sürücüleri: http://www.go-mono.com/mysql.html
Yeni bir proje başlattıkdan sonra ByteFX.MySqlClient.dll 'i referans olarak eklemeliyiz. mySQL ADO.NET sürücüleri kurulumunu gerçekleştirdiyseniz bu assembly dosyaları kütüphaneler arasında gözükücektir.
mySQL kütüphanelerini projemize referans olarak ekledikten sonra mySQL'e erişiceğimiz kod içerisine aşağıdaki belirtiyi ekleriz
Form veya webservisleri için veritabanındaki bilgiye ulaşmanın iki yoluna değinicez. Bunlardan biri klasik çektiğimiz verileri satır satır işlemek bir diğeri ise DataSet sınıfını kullanarak işleri biraz daha kolaylaştırmak.
Veritabanını işlemek:
Yukarıdaki örnekte users tablosundaki tüm kayıtları çekip sadece ilk ve ikinci kolondaki bilgileri ekrana yazdırdık. Burda dikkat etmemiz gereken konu; eğer tanımladığımız nesneler içinde mySQL bağlantıları açıyorsak mutlaka kapamamız gerektiğidir. Aksi taktirde tanımlı olan mySQL ayarları sizin 10'dan fazla bağlantı açmanıza izin vermeyecek ve bir sonraki nesne yaratma isteminizde programınız hata vericektir. (Bu hata yukardaki program için geçerli olamaz çünki _tmain içerisinde tek bir bağlantı açtık.)
DataSet ve mySQL:
DataSet sınıfı System:
ata 'nin altında bulunmaktadır. Bu sınıfın amacı veritabanından aldığımız veriler üzerinde gerçekleştirdiğimiz işlemleri kolaylaştırmak. Örneğin web servislerinde bir tablo bilgisi döndürmemiz gerektiğinde DataSet içerisindeki veriler kolaylıkla XML'e çevrilip SOAP aracılığı ile karşı tarafa iletilebilmekte. Veya hazırladığımız çok elemanlı formlar içerisinde DataSet ile arada bağlantı kurup bir form elemanı etkilendiğinde bu değişimin kolayca diğer elemanlarda gözlenmesi. Açıkcası dataset bir çok konuda kolaylık getiren ve kullanması kolay bir yapı.
DataSet 'i bir hamur gibi düşünmek sanırım yanlış olmaz. Bu hamur veritabanından aldığımız tablonun yapsına göre kendini şekillendirmektedir. Bunu şekillendirme daha evvel tanımlanmış adaptörler sayesinde gerçekleştirmektedir. Kısacası veritabanında yaptığımız bir sorgu sonucu karşımıza gelen çıktıyı, DataAdaptor sayesinde DataSet'in içine rahatlıkla uygulayabiliriz. Aşağıda bunla ilgili bir form uygulaması görücez.
Öncelikli olarak mySQL 'e erişim konusunda ihtiyacımız olabilecek araçları nerden sağlayabiliriz.
( İlgili adreslerden indiriceğiniz tüm uygulamalar GPL lisansı altındadır ve ücretsizdir. )
mySQL: http://dev.mysql.com/downloads/
mySQL Administrator: http://dev.mysql.com/downloads/administrator/
mySQL Editor: http://www.mysqlfront.de/download.html
mySQL ADO.NET Sürücüleri: http://www.go-mono.com/mysql.html
Yeni bir proje başlattıkdan sonra ByteFX.MySqlClient.dll 'i referans olarak eklemeliyiz. mySQL ADO.NET sürücüleri kurulumunu gerçekleştirdiyseniz bu assembly dosyaları kütüphaneler arasında gözükücektir.
mySQL kütüphanelerini projemize referans olarak ekledikten sonra mySQL'e erişiceğimiz kod içerisine aşağıdaki belirtiyi ekleriz
Kod:
using namespace ByteFX::Data::MySqlClient;
Form veya webservisleri için veritabanındaki bilgiye ulaşmanın iki yoluna değinicez. Bunlardan biri klasik çektiğimiz verileri satır satır işlemek bir diğeri ise DataSet sınıfını kullanarak işleri biraz daha kolaylaştırmak.
Veritabanını işlemek:
Kod:
// bir konsol uygulaması
#using <mscorlib.dll>
using namespace System;
using namespace ByteFX::Data::MySqlClient;
int _tmain()
{
String * myConnectionString;
String * mySqlString;
MySqlConnection * myConnection;
MySqlDataReader * myReader;
myConnectionString = "Database=dotnet;Data Source=localhost;user id=root;password=;";
myConnection = new MySqlConnection(myConnectionString);
myConnection->Open();
mySqlString = "SELECT * FROM users";
MySqlCommand * myCommand = new MySqlCommand(mySqlString, myConnection);
/*
ExecuteReader yöntemine eğer SQL sorgunuz bir çıktı döndürüyorsa ihtiyacınız vardır ve çıktısının referansını myReader'a gönderir. Aksi taktirde UPDATE,INSERT,DELETE gibi çıktı döndürmeyen SQL komutlarında ExecuteNonQuery kullanılır
myCommand->ExecuteNonQuery();
*/
myReader = myCommand->ExecuteReader();
for(int i=0;myReader->Read();i++)
{
// ilk kolon integer tipinde ise
int id = myReader->GetInt32(0);
// ikinci kolon varchar veya text tipinde ise
String * username = myReader->GetString(1);
System::Console::WriteLine("{0},{1}", __box(id), username);
}
myConnection->Close();
return 0;
}
Yukarıdaki örnekte users tablosundaki tüm kayıtları çekip sadece ilk ve ikinci kolondaki bilgileri ekrana yazdırdık. Burda dikkat etmemiz gereken konu; eğer tanımladığımız nesneler içinde mySQL bağlantıları açıyorsak mutlaka kapamamız gerektiğidir. Aksi taktirde tanımlı olan mySQL ayarları sizin 10'dan fazla bağlantı açmanıza izin vermeyecek ve bir sonraki nesne yaratma isteminizde programınız hata vericektir. (Bu hata yukardaki program için geçerli olamaz çünki _tmain içerisinde tek bir bağlantı açtık.)
DataSet ve mySQL:
DataSet sınıfı System:
DataSet 'i bir hamur gibi düşünmek sanırım yanlış olmaz. Bu hamur veritabanından aldığımız tablonun yapsına göre kendini şekillendirmektedir. Bunu şekillendirme daha evvel tanımlanmış adaptörler sayesinde gerçekleştirmektedir. Kısacası veritabanında yaptığımız bir sorgu sonucu karşımıza gelen çıktıyı, DataAdaptor sayesinde DataSet'in içine rahatlıkla uygulayabiliriz. Aşağıda bunla ilgili bir form uygulaması görücez.