none
Veritabanı bağlantı/veri çekme sorunu RRS feed

  • Genel Tartışma

  • Merhaba,

    Asp.NET + MSSql -> Yönetim paneli olan bir site geliştirmekteyim.Hosting olarak natro ile çalışıyoruz.Kimi zaman veritabanına bağlanırken kimi zaman ise açık bağlantı ile ilgili hata vermekte.

     Aldığım hatalar aşağıdaki gibidir.

    Veritabanına bağlanırken aldığım hata:

    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.


     

    Veri çekerken aldığım hata

    executereader requires an open and available connection. the connection's current state is closed

     


     

     

    Örnek Örnek Kod:

     

    public static string KategoriAdiGetir(string AltKatID)

    {

    DB DB = new DB();
    DB.DB_Baglan();
    string KategoriAdi = "";
    try
    {

    string Sql = "select AltKatID,AlKatAdi from tbl_urun_alt_kategori where AltKatID=" + AltKatID+" ";

    SqlCommand cmd = new SqlCommand(Sql,DB.conn);

    SqlDataReader dr = cmd.ExecuteReader();
    dr.Read();
    if (dr.HasRows)
    {
    KategoriAdi=dr["AlKatAdi"].ToString().Trim();

    }
    dr.Close();
    }

    catch (Exception ex)
    {

    Messagebox.show("Kategori Adı Getirilirken Hata Oluştu." + ex.Message);

    }

    DB.DB_Kapat();

    return KategoriAdi;


    }

     

    ---------------------------------------------------------------------

    Bu şekilde açılan bağlantıları aslında DB.kapat(); ile kapatıyorum aslında.Aynı şekilde datareader nesnesini de  close() metodu ile kapatıyorum.Bunların dışında yapılması gereken herhangi bir şey var mıdır ? Örneğin Dispose gibi.Yada başka bir teknik mi kullanmalıyım örneğin bağlantı açık kalmış mı gibi ?

    27 Eylül 2017 Çarşamba 09:32

Tüm Yanıtlar

  • DB class içeriğine ne yazdın bilmiyorum ama istersen sqlconnection direk kullanarak dene. sqlconnection static tanımladıysan onun içine aynı anda istek geldiğinde patlıyor olabilir. ilk istekte con open iken ikinci istek de open yapmaya çalışıyor olabilir.

    Eğer yine hata alırsan hizmet sağlayıcısıyla görüş. Timeout süresini arttırabilirsin fakat çözüm olacağını düşünmüyorum. dispose kullanmana gerek yok.

    var conn = new SqlConnection(connstr);

    var cmd = new SqlCommand(Sql,conn );

    con.Open();

    SqlDataReader dr = cmd.ExecuteReader();

    ...

    con.Close();

    27 Eylül 2017 Çarşamba 21:05