|
|
|
ADO.NET ile Veritabanlarına Bağlanma |
|
| Gönderiliyor lütfen bekleyin... |
|
|
Şimdiye kadar geliştirilen
profesyonel yazılımların hemen hepsinde bir şekilde dosyalarda veya bir veritabanında
saklanmış veriye erişim ve bu veriyi kullanmak gerekmiştir. Microsoft.NET
ile geliştirilen uygulamarın büyük bir kısmında veriye ihityacımızın olacağını
da tartışmak pek mümkün değildir. Bu bağlamda, geleceğin programlama platformu
olan Microsoft.NET verilere erişimi ve bu veriler üzerinde işlemler yapmayı
çok kolay hale getiren ADO.NET'i de geliştirmiştir. ADO.NET'e giriş amaçlı olarak
şu makalemizi okumanızı tavsiye ederim.
ADO.NET ile SQL
Server'a SqlClient sınıfı ile veya OleDb provider ile bağlanabiliriz. Access
veritabanımıza ise hızlı bir biçimde bağlanmak için yine OleDb provider'ı kullanmamız
mümkün. Bunların yanında .NET XLM verilerine de erişim konusunda geniş sınıf
kütüphanlerine sahip olduğunu belirtmekte yarar vardır. ADO.NET ile çalışmaya
başlamadan önce isterseniz veritabanlarımıza nasıl bağlanırız bir görelim. Böylelikle
verilere değişik şekilde ulaşmayı başararak programlarımızda daha esnek ve etkili
olabiliriz.
Yazımızın kalan kısmında
sırası ile SQL sunucumuzda bulunan bir veritabanımıza önce SqlClient sonra
OleDb sağlayıcısı ile bağlancağız. Access veritabanımıza ise tabi ki OleDb
sağlayıcısını kullanarak bağlanmayı hedefliyoruz.
using System;
using System.Data.SqlClient;
public class SqlClientOrnegi
{
public static void Main()
{
//
bağlantıya geçmeyi düşündüğümüz
veritabanımızın bulunduğu sunucu ismi,
//
sunucuda geçerli bir kullanıcı ismi, şifresi
ve veritabanımızın ismini karakter katarı
olarak yazıyoruz.
stringkaynak="server=yakmoz000;uid=sa; database=Northwind;";
//
Bağlantı nesnemizi baglanti ismi ile oluşturalım
SqlConnection
baglanti = new SqlConnection(kaynak);
//
bağlantı nesnemizin Open() metodunu kullanarak bağlantımızı
açalım.
baglanti.Open();
//
Bağlantımız açtığımızı
garantilemek için araya bir mesaj yazalım.
Console.WriteLine("Başarı
ile SQL servere bağlandık. ");
//
Veritabanı kritik bir kaynak olduğu için işimiz
bitince hemen kapatalım.
baglanti.Close();
Console.ReadLine();
}
}
|
Yukarıdaki programı incelersek; ADO.NET ile SQL Server veritabanı sunucumuza
bağlanmamızın ne kadar kolay olduğunu görebiliriz. Öncelikle SQL sunucu ile işlemler için System.Data isim
uzayının (namespace); System.Data.Sqlclient alt isim uzayını kodumuzun en başına eklememiz gerekir. Bu isim
uzayı SQL sunucu ile olan işlerleri sağlamamıza yarayan nesneleri ve metodları içerir.
Bağlantıyı kurmak için; bağlantı kuracağımız veritabanı sunucumuzun ismini server=yakamoz000 olarak
(benim sunucumun ismi yakamoz00'dı sizinki başka olacaktır tabii)
verdik, sunucuda tanımlanmış bir kullanıcı ismi de vermemiz gerekir ki bunu uid=sa (sa aslında serveradmin - sunucu yöneticisi) seçtik.
Enson bağlamayı istediğimiz veri tabanımızın ismini database=northwind(klasik olarak northwind, çünkü her sunucuda
varsayılan olarak kurulur) ekliyoruz. Bağlantı için, bağlantı nesnemizi (connection obejct) oluşturmamız gerekir. Bağlantı nesnemizin ismini
baglanti şeklinde seçmemiz bizim için ileride daha kolay hatırlamamızı sağlayacağını umarım.
Artık bağlantı nesnemiz elimizde olduğuna göre bağlantımızı yapabiliriz. Bunun için nesnemizin Open() metodunu kullanıyoruz.
Bağlantıyı açtığımızı bize bildirmesi için bir de konsola bağlantıyı açtık şeklinde bir uyarı yazdırıyoruz.
Bağlantımızı sorunsuz bir biçimde açtıktan sonra burada istediğimiz işlemleri yapabiliriz. Veritabanımız ile
işlerimiz bittikten sonra, kritik olan bu kaynağı serbest bırakmamız gerekiyor. Close() metodu ile bağlantıyı
kapatabiliriz.
Bir sonraki inceleyeceğimiz bağlantı türü SQL sunucuya OleDb sağlayıcısı ile bağlanmak olacak.
Aşağıdaki kodu dikkatlice incelersek SQL sunucuya SqlClient veya OleDb metodlarından biriyle bağlanma
arasında çok bir fark olmadığını görürüz. Farklara gelince:
- Kullanacağımız isimuzayı System.Data.OleDb olarak değiştirdik.
- kaynak isimli bağlantı katarımızın başına Provider=SqlOleDb ekledik.
- SqlConnection yerine OleDbConnection yazdık.
Geriye kalan herşey aynı; bu da yazımın baş taraflarında belirttiğim esnekliği ve gücü
programcıya ADO.NET'in nasıl sunduğunun kanıtıdır kanaatindeyim. Hemen aklınıza şu soru gelebilir:"İyi de SQL veritabanı
sunucusu ile çalışırken SqlClient alt isim uzayının metodları ile çalışabileceğimize göre neden aynı sunucuyla
OleDbalt isim uzayı ile de erişime ihtiyaç duyarız?" Bu sorunun birinci cevabı
b>SqlClient alt isim uzayı
SQL sunucusu için optimize edilmiş olmasıdır. Diğerlerinden biri de öyle bir projede çalışmak zorunda kalırız ki aynı anda
hem SQL sunucuya hem de Access ve/veya diğer bir OLEDB destekli veritabanı ile işlerimiz olur. Bu durumda OleDb provider için
yazdığımız ve programımıza özgü kodları SQL sunucu ile olan kısmı için ayrı bir kod yazmak zahmetli olabilir.
using
System;
using System.Data.OleDb;
public class SqlOleOrnegi
{
public static void Main()
{
//
bağlantıya geçmeyi düşündüğümüz veritabanımızın bulunduğu sunucu ismi,
//
sunucuda geçerli bir kullanıcı ismi, şifresi ve veritabanımızın ismini
karakter katarı olarak yazıyoruz.
string
kaynak="Provider=
SqlOleDb;server=yakamoz;uid=sa; database=northwind;";
//
Bağlantı nesnemizi baglanti ismi ile oluşturalım
OleDbConnection
baglanti = new
OleDbConnection(kaynak);
//
bağlantı nesnemizin Open() metodunu kullanarak bağlantımızı
açalım.
baglanti.Open();
//
Bağlantımız açtığımızı garantilemek için araya bir mesaj yazalım.
Console.WriteLine("Başarı
ile OleDb kullanarak SQL servere bağlandık.");
//
Veritabanı kritik bir kaynak olduğu için işimiz
bitince hemen kapatalım.
baglanti.Close();
Console.ReadLine();
}
}
|
Şimdi isterseniz Access veritabanımıza OleDb sağlayıcısı ile bağlanalım. Aşağıda bulunan kodu dikkatlice
inceler ve bir üstteki kod ile karşılaştırırsak gerçekten hayatımızın ne kadar kolaylaştığını göreceğiz. Evet tek fark
bağlantı karakter katarı. Bu katar ( kaynak ) iki tane parametreleri içeriyor. Birincisi bağlantıyı hangi
sağlayıcı (provider) ile yapacağımızın bildirgesi. Diğeri ise veritabanımızın ismi ve yeri
(örnekte veri tabanı program kodu ile aynı dizinde olduğu varsayılıyor!).
using
System;
using System.Data.OleDb;
public class AccessOleDbOrnegi
{
public static void Main()
{
//
bağlantıya geçmeyi düşündüğümüz veritabanımıza bağlantıyı sağlayan provider
//
ve veritabanımızın ismini ve yeri.
string
kaynak="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb";
//
Bağlantı nesnemizi baglanti ismi ile oluşturalım
OleDbConnection
baglanti = new
OleDbConnection(kaynak);
//
bağlantı nesnemizin Open() metodunu kullanarak bağlantımızı
açalım.
baglanti.Open();
//
Bağlantımızı açtığımızı garantilemek için araya bir mesaj yazalım.
Console.WriteLine("Başarı
ile OleDb kullanarak SQL servere bağlandık.");
//
Veritabanı kritik bir kaynak olduğu için işimiz
bitince hemen kapatalım.
baglanti.Close();
Console.ReadLine();
}
}
|
ADo.NET ile programlamaya giriş mahiyetinde şimdilik sadece bağlantıları nasıl kuracağımızı öğrendik.
Bunun yanında ADO.NET ile programlamaya başlarken bile bize sağladığı avantajları hemen hissettik. İlerleyen
yazılarımızda ADO.NET programlama konusunda değişik başlıklar üzerinde daha derinlemesine durmayı düşünüyorum.
, ADO.NET/SQL, Ahmet Faruk Nacaroğlu ADO.NET ile Veritabanlarına Bağlanma ADO.NET ve SQL Ahmet Faruk Nacaroğlu
|
|
AĞU 22
2004 |
Bu bizim yorum yazma ekranındaki bir bugtan dolayı çıkıyor. OLE DB provider bu hatayı yakalayım bize iletiyor.... |
|
AĞU 22
2004 |
Microsoft OLE DB Provider for ODBC Drivers error 80004005
[Microsoft][ODBC Microsoft Access Driver] Field makale_yorumlar.Yorum cannot be a zero-length string.
/yorum_ekle.asp, line 23
bu nedir acaba açıklarsanız sevinirim :) |
|
OCA 8
2003 |
... bir sınıfın nasıl kullanılacağını anlatan yapılar bunlar..bunlar msdn de böyle ingilizce kitaplarda da böyle türkçe kitaplarda da.. bu yapılar farklı şekilde nasıl yazılır acaba? bir fikriniz varsa bizimle paylaşırmısınz .. |
|
OCA 8
2003 |
Hangi makaleden? sepecific olarak? zaten ingilizce bu şekilde yüzlerce makale var. Hepsinin de kodu aynı olmak zorunda... Bu konu çook temel ve kod çook basit olmalı.. |
|
OCA 7
2003 |
dostum bu makeleler cogu kopya hepsi bir yerden(ingilizcem makaleden) araklanmis..En azindan kaynak kodlar öyle.. |
|
|
Sayfalar :
|
|
|
|
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|
|