10 Mayıs 2012 Perşembe

ADO.NET 'de Connection String parametresini App.Config dosyasından çekmek

Merhaba arkadaşlar.
"Ado.Net" kullanarak veritabanınıza bağlandığınız uygulamalarda, projenizde "connection string" 'lerinize daha kolay ve daha modüler bir şekilde ulaşmanız isteyebilirsiniz. Bunun için projenize bir adet "App.config" dosyası atarak, "connection string" parametrenizi burada "connection string" tegleri arasında "add" tegleri içerisinde tanımlamalısınız. Ayrıca aşağıda görüldüğü üzere birden fazla "connection string" de tanımlayabiliriz.  "name" ve "connectionString" attribute değerlerinin kullanılması şarttır. Ayrıca birbirinden farklı veritabanlarına bağlantı kuracaksam farklı "provider" sağalayıcıları için "providerName" attribute değeri de verilebilir. Örneğin Sql Server 'a bağlanmak istediğimi belirtmek için "providerName System.Data.SqlClient" verilmelidir.

<connectionStrings>
    <clear/>
    <add name="NorthwindBaglanti" connectionString="Server=. ; Database=Northwind ; trusted_connection=true"/>
    <add name="NorthwindBaglantiMARS" connectionString="Server=. ; Database=Northwind ; trusted_connection=true ; MultipleActiveResultSets=true"/>
    <add name="NorthwindBaglantiPooling" connectionString="Server=. ; Database=Northwind ; trusted_connection=true ; Pooling=true ; Min Pool Size=10 ; Max Pool Size=100"/>
</connectionStrings>

Yalnız arkadaşlar eğer birden fazla "connection string" tanımladıysanız, öncelikle "connection string" 'leri "<clear/>" ile temizlemekte fayda var. Biraz sonra görecek olduğumuz "ConfigurationManager" sınıfının "ConnectionStrings" adında bir koleksiyonu var. Bu koleksiyonda köşeli parantezler içerisinde, hangi "connection string" i kullanmak istiyorsam o "connection string" in ya string tipinde "name" özelliğini yada int tipinde index nosunu vermeliyim. Form sınıfında bu "connection string" lerden hangisi çağırmak istiyorsam ya ismini yada index nımarasını vermem gerekiyor. Aşağıdaki gibi ismiyle çağırırken bir problem yok.

SqlConnection conneection = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindBaglantiMARS"].ConnectionString);

Fakat indexle çağırırken "0" değeri için :


SqlConnection conneection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString);

aşağıda görüldüğü gibi bazen "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config" yada "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config" dizini altında "machine.config" dosyasındaki "connection string" i görebilir. Bu string "sqlexpress" instanse ıdır. Eğer sunucuda böyle bir instance yoksa hata verecektir.

<connectionStrings>
        <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

Bu nedenle öncelikle "connection string" 'leri "<clear/>" ile temizliyorum. Daha sonra "App.config" dosyanızdan "Form" class ınıza veri çekebilmek için "Solution Explorer" penceresinde "References" sekmesine sağtık "Add References" seçeneğini tıklamalıyız.

  Bu pencerede ise ".Net" sekmesi altında "System.Configuration" namespace 'ini seçerek tamam demeliyiz.
Görüldüğü üzere "References" sekmesi altında "System.Configuration" namespace 'ini ekledik.
Daha sonra "using" 'lere de "System.Configuration" ekliyoruz. Yukarıda tanımladığımız gibi uygulamanızda "App.config" dosyasındaki istediğimiz "connection string" cümleciğini, "SqlConnection" nesnenizin "connection string" parametresinde, ister ismiyle istersek de index numarasıyla çağırabiliriz.

NOT: Class Library projelerine app.config konulsa da konulmasa da, o class library dll 'i hangi exe 'e uygulamasında çalışacaksa o uygulamdaki app.config 'i görür. Eğer uygulamada app.config dosyası yoksa machinne.config 'deki connection string 'i okuyacaktır.

Başka bir yazıda görüşmek dileğiyle, hoşçakalın...

Hiç yorum yok:

Yorum Gönder