Asp.NET de uygulama düzeyli veritabanı bağlantısı

Kodla Büyü

exelsior

Aktif Üye
Mesajlar
842
ASP.NET sayfalarımızda varitabanı kullanacağımız zaman genelde o asp sayfasında bir bağlantı oluşturma gerekliliği vardır yada buna inanılır. Bir çok kullanıcının sitemizde olduğunu ve girip çıktıkları her sayfada yeni bir bağlantı nesnesi oluşturulduğunu düşündüğümüzde bu sunucu üzerinde sistem kaynakları üzerine büyük yük getirecektir. Üstelik bir çok kodlaycı kişi oluşturdukları bağlantı nesnelerine ait referansları işleri bittiklerinde boşa çıkarmadıklarından dolayı da sunucu belleğinde kullanılıp bırakılmış birçok bağlantı nesnesi kalmaktadır. Bunlar belli bir süre sonra silinecek olsa da bu süre zarfı içerisinde sisteme büyük yük getireceklerdir. Zaten bilindiği üzere asp ve asp.net dayalı sitelerin bir hız dezavantajı vardır, kullanıcılar yukarıda anlattığım konulara dikkat etmediklerinde bu hız kaybı dahada artmaktadır.

Şimdi bir asp.net web sitesinde tüm web sayfaları için geçerli, kullanılabilir tek bir bağlantıyla işlerin nasıl yürüdüğünü göstereceğim. Bu tek bağlantı her zaman site suncusu belleğinde hazır bekleyecektir.

Global.asax dosyasında bu bağlantı nesnesini oluşturmaya ait kod kısmı şöyle olacaktır.
Kod:
void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        
       Application.Add("Baglanti", new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("~/vt/vt.mdb")));

    }

sitemizdeki bir yerde bu bağlantıyı kullanırken yazacaklarımız da şöyle olacaktır.

Kod:
((System.Data.OleDb.OleDbConnection)Application["Baglanti"]).

en sondaki noktadan sonra istediğimiz bağlantı özelliğini yada metodunu kullancağız.

mesela bağlantıyı açmak için
Kod:
((System.Data.OleDb.OleDbConnection)Application["Baglanti"]).Open();

işimiz bittiğinde de
Kod:
((System.Data.OleDb.OleDbConnection)Application["Baglanti"]).Close();

ama sakın bağlantı nesnesini boşa çıkarmayın, çünkü bu bağlantı hazır olarak bekleyecek ve gerekli istekler de kullanılacaktır. Boşa çıkarırsanız başka bir sayfa bu bağlantıya erişmek istediğinde erişemeyecek ve InvalidCastException hatasıyla karşılaşacaksınız. Bunun için aşağıdaki kodu yada bezerini kullanmayın.
Kod:
((System.Data.OleDb.OleDbConnection)Application["Baglanti"]).Dispose();
Application koleksiyon nesnesinden önce yazdığm parantez içindeki System.Data.OleDb.OleDbConnection nesne tanımı, application nesnesi içerisinden hangi türde nesne çıkarılacağını belirtmek içindir. Zira bir application koleksiyon nesnesi içerisinde bir değişken-nesne-sıralama gibi değişik türden veri olabilir.

Bu yöntemle ilgili sorunlar yaşar ve işin içinden çıkamayıp, ilk anlattığım yöntemleri kullanmaya devam edecekseniz de şunları yapmayı ihmal etmeyin.
Bağlantıyla işiniz bittiğinde kapatın ve nesneyi imha edin
Kod:
cnnBaglanti.Close();
cnnBaglanti.Dispose();
Bu iki ardarda kod işinizi halleder. close dedikten sonra tekrar open diyerek bağlantıyı açabilirsiniz ama dispose dedikten sorna nesne imha edileceğinden hiçbir metoduna ulaşamazsınız.
 
BBNET
Geri
Üst