ADO.NET Connected Mimari-SqlConnection Nesnesi ve App.config Dosyası
Bu yazımızda ADO.NET’e giriş yapacağız.Genellikle C# ya da ASP.net ile yazdığımız programlarda database(veritabanı) kullanmaktayız.Ancak bu programları yazarken veritabanıyla bağlantı kurmamız gerekecek, bağlantı kurduğumuz veritabanı üzerinde sorgular çalıştırmamız gerekebilir.ADO.NET veritabanıyla yapılacak bu tür işleri gerçekleştiren class ları barındıran bir yapıdır.
Veritabanı olarak SQL Server kullanmayı tercih ettiğim için öncelikle çalışmanıza System.Data.SqlClient namespace ini eklemelisiniz.
SqlConnection Nesnesi
Database işlemlerimi yapabilmem için SQL Server a bağlı olmam gerekir.Bunu yapacak olan nesne SqlConnection nesnesidir.
Şimdi bir tane SqlConnection nesnesi oluşturalım.
SqlConnection baglanti = new SqlConnection("Server=ServerAdı;database=VeritabanıAdı;trusted_connection=true;");
Yukarıda baglanti referansına bir SqlConnection nesnesi tanımlamış olduk.Bu nesnenin constructorına “Server=ServerAdı;database=VeritabanıAdı;trusted_connection=true;” yazdığımız ifade veritabanı bağlantısını gerçekleştiren prosedürdür.Server’a veritabanımızın serverını,database’e veritabanı ismini yazmamız gerekiyor.
Bu prosedürü belirtmenin constructor lardan başka yollarıda vardır.
SqlConnection baglanti = new SqlConnection(); baglanti.ConnectionString = "Server=ServerAdı;database=VeritabanıAdı;trusted_connection=true;";
Yukarda gördüğünüz gibi bağlantı kodlarını ConnectionString özelliğine yazıyoruz.
Burda şunada değinmek istiyorum.
trusted_connection=true; = SQL Server’a bağlanırken Windows Authentication ile bağlan demektir.
Yukardaki ConnectionString yerine şu da aynı Windows Authentication ile bağlanmaya yarar.
Data Source=ServerAdı;Initial Catalog=Veritabanı;Integrated Security=SSPI
Eğer SQL Server Authentication ile bağlantı kuracaksak aşağıdaki gibi bir bağlantı cümlesi yazmalıyız.
server =ServerAdı;database=VeritabanıAdı;uid=KullanıcıAdı;password=KullanıcıSifre;trusted_connection=false; ya da Data Source=ServerAdı;Initial Catalog=VeritabanıAdı;User Id=KullanıcıAdı;Password=KullanıcıŞifresi;
Not : www.connectionstrings.com bu sitede kullanabileceğiniz connectionstring leri öğrenebilirsiniz.
Bunları gösterdikten sonra gelelim SqlConnection nesnemize.Hangi server da hangi databaseye bağlanacağını belirttikten sonra o baglantiyi açmamız gerekiyor.
baglanti.Open(); \\ Bağlantıyı aç, \* Bağlantı varken yapılacak işlemler *\ baglanti.Close(); \\ Baglantıyı kapat.
Tabi bağlantıyı bodoslama açıp kapatmayı denemiyoruz.Bağlantının durumunu kontrol edip ona göre hareket ediyoruz.Bağlantının o anlık durumu State komutu ile öğrenilebilir.
if (baglanti.State==ConnectionState.Closed)
{
baglanti.Open();
MessageBox.Show("Bağlantı açıldı.");
}
Yukarıda bağlantı durumunu kontrol edip ona göre bağlantımızı açmış bulunuyoruz.ConnectionState içindeki durumları açıklayayım.
Closed : Database e bağlantı kapalıysa.
Broken : database e kurulan bağlantının bir şekilde kırıldığı, bozulduğunu haber verir.
Connecting : Bağlantının hala kurulmaya çalışıldığını haber verir.
Executing : Bağlantı kurulmnuş ve şu an o database üzerinde bir işlem yapılıyor (sorgu işliyor)
Fetching : Satır satır işlem yapılıyor bilgisini haber eder.
Not:Açılan her bağlantı kapatılmalıdır.Ve bağlantı nesnesi yok edilmelidir.
baglanti.Dispose(); \\ baglanti nesnesini yok eder.Boşuna bellekte yer kaplamaz.
Şimdi önemli bir noktaya değineceğim.Eğer biz programımız da birden çok SqlConnection bağlantısı oluşturmuşsak ve ileride bu bağlantının kullandığı database değiştirmek zorunda kalırsak bütün bağlantıları teker teker modifiye etmek zorunda kalacağız.O halde database bağlantı cümleciğini tek bir yerde tutmalı ve o tuttuğumuz yerden SqlConnection larımızın ConnectionString lerine çekmeliyiz.Bu işlem çeşitli yollarla yapılabilir ancak .Net Framework’ün bize bu iş için sunduğu “Application Configuration File”(App.config) dosyasını kullanacağız.Bu dosyayı eklemek için projeye sağ tıklayın ve Add new item diyip Aplication Configuration File dosyasını ismini DEĞİŞTİRMEDEN projeye ekleyiniz.
App.config dosyası projenin genelinde kullanılacak bir takım verilerin,ayarların saklanması amacı ile kullanılan bir dosyadır.Bu dosyayı kullanın.Çünkü güvenlidir.Yönetimi kolaydır.
System.Configuration namespace i içinde ConfigurationManager class ı ile yönetilebilir.ConfigurationManager bizi direkt App.config dosyasına eriştirir ve oradaki düğümleri kullandırır bize.
İçinde <configuration> düğümü hazır gelir.Program ayarlarını saklamak için <appSettings> düğümünü biz açarız.
Şimdi App.config dosyasıyla veritabanına bağlantı yapalım.
App.config dosyasını projeye ekliyoruz ve içine aşağıdaki kodları yazıyoruz.
<!--?xml version="1.0" encoding="utf-8" ?-->
key=”Baglanti” = App.config dosyasına eklenen her bir kayıtın ya index numarası vardır(yazılış sırasına göre) ya da key anahtarıyla bunlara isim verebiliriz.
value=”server=ServerAdı;database=VeritabanıAdı;Trusted_connection=true;” = Bu Bağlanti kayıtının çalıştıracağı kodlar.
Şimdide bu App.config ile veritabanına bağlanalım.
using System.Configuration; SqlConnection baglanti = new SqlConnection(ConfigurationManager.AppSettings["Baglanti"]); baglanti.Open();
ConfigurationManager.AppSettings[“Baglanti”] = Burada AppSettings bir koleksiyon yapısındadır.App.config dosyasındaki düğümü içinde key değerlerine index numarası ya da adıyla ulaşıp value kısmında tanımlı olan değeri string olarak geriye döndürür.
App.config dosyasında dikkat etmemiz gereken iki husus var.
-Dosyanın adı App.config olarak kalmalıdır.Değiştirmeye çalışmayınız.
-Bağlantı cümlesinde serverımızı belirtirken bazen \\ işareti kullanırız.Bunun sebebi \ özel karakter olmasıdır.Atıyorum serverımızın ismi Gencay ise “\\Gencay” olarak belirtmemiz gerekebilir.App.config dosyasında ise tek taksim işareti koymamız gerekiyor.
SQL Serverda bağlantı açarken çeşitli sebeplerden dolayı hatalar oluşabilir.O yüzden bağlantı açıp kapatma işlemini try catch metodları arasında yazmalıyız.
using System.Data.SqlClient;
using System.Configuration;
SqlConnection baglanti = new SqlConnection(ConfigurationManager.AppSettings["Baglanti"]);
try
{
if (baglanti.State == ConnectionState.Closed)
{
baglanti.Open();
MessageBox.Show("Bağlandı");
}
}
catch (SqlException hata)
{
MessageBox.Show(hata.Message);
}
finally
{
if (baglanti.State==ConnectionState.Open)
{
baglanti.Close();
}
baglanti.Dispose();
}
Artık yukarıdaki yapı bize SQL Server a bağlantıyı kurar, açar, hata varsa yakalar, her durumda da bağlantıyı kapatıp, nesneyi yok ederek bellek tasarrufunu sağlar. Artık biz işlemlerimizi (select,insert,update,delete v.s.) açık bağlantı devam ettiği sürece yapabiliriz. İşte bu yapıya CONNECTED MİMARİ denir. baglanti.Open()-baglanti.Close() arasında database işlemleri yapılır.
