一个好主意,我目前使用一个单上我的web应用程序的连接,以便有永远只有一个连接到数据库。是使用单在ASP.NET网站
我想知道这是否是因为现在我有与错误的麻烦是一个好主意:
超时过期。在从池中获取连接之前已超时。发生这种情况的原因可能是因为所有连接池都在使用中,并且达到最大池大小。
另一个重要的一点是,我的网站目前正在开发,并没有很多人去,所以我不明白为什么我得到这个错误!
这是我单身的代码:
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;
}
}
}
感谢您的帮助!
虽然我同意单身人士是一个SqlConnection坏主意,我没有看到任何迹象表明,它将被限制为一个单一的请求。代码中没有锁定会阻止SqlConnection对象的多个用户(如果有的话,由于线程问题使得它更糟糕)。 – 2009-10-13 00:21:32
@马克,德哦!我在没有通读整个代码的情况下写了这篇文章,假设有锁定限制使用Connection!正如你注意到的那样,这可能会导致完全不同的问题。我已经更新了我的答案以反映这一点。 – 2009-10-13 01:02:09
谢谢你们!非常快速和明确的答案。这将很容易解决这个问题!再次感谢! – 2009-10-13 10:34:08