代码之家  ›  专栏  ›  技术社区  ›  Jean-François Côté

使用singleton进行连接是ASP.NET网站中的一个好主意

  •  4
  • Jean-François Côté  · 技术社区  · 16 年前

    我目前在我的Web应用程序上使用的是单实例,因此始终只有一个到数据库的连接。

    我想知道这是不是个好主意,因为现在我遇到了错误:

    超时已过期。从池获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。

    另一个重要点是,我的网站目前在dev中,没有很多人使用它,所以我不明白为什么会出现这个错误!

    这是我的单打号码:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    
    /// <summary>
    /// This class take care of all the interaction with the database
    /// </summary>
    public class DatabaseFacade
    {
        SqlConnection m_conn = null;
    
        string m_csLanguageColumn;
    
        //Variables that implement the Singleton pattern
        //Singleton pattern create only one instance of the class
        static DatabaseFacade instance = null;
        static readonly object padlock = new object();
    
        /// <summary>
        /// Private constructor. We must use Instance to use this class
        /// </summary>
        private DatabaseFacade()
        {
        }
    
        /// <summary>
        /// Static method to implement the Singleton
        /// </summary>
        public static DatabaseFacade Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new DatabaseFacade();
                    }
                    return instance;
                }
            }
        }
    
        /// <summary>
        /// Do the connection to the database
        /// </summary>
        public void InitConnection(int nLanguage)
        {
            m_conn = new SqlConnection(GetGoodConnectionString());
    
            try
            {
                //We check if the connection is not already open
                if (m_conn.State != ConnectionState.Open)
                {
                    m_conn.Open();
                }
    
                m_csLanguageColumn = Tools.GetTranslationColumn(nLanguage);
    
            }
            catch (Exception err)
            {
                throw err;
            }
        }
    }
    

    谢谢你的帮助!

    推荐文章