超时已过期。从池中获取连接之前经过的超时时间

时间:2011-07-27 20:57:07

标签: sql timeout connection using application-pool

我在asp.net开发方面相当新,所以你可以说我开发了一个编码不好的应用程序,它给了我这个错误。

超时已过期。从池中获取连接之前已经过了超时时间。

我尝试在google上搜索并发现它是因为应用程序池中未关闭的连接而发生的,所以我仔细检查了我的应用程序并使用关键字插入所有Sqlconnections,但我仍然遇到此问题,这里是我的应用程序的一些示例代码。所有Sql连接都包含在这样的using语句中。

    using (Connection = new SqlConnection(CIPConnection))
    {
        string ReturnValue = String.Empty;
        try
        {
            SqlDataReader Reader;
            Connection.Open();
            string CommandText = "SELECT * FROM Users WHERE NAME = @NAME AND PASSWORD = @PASSWORD";
            Command = new SqlCommand(CommandText, Connection);
            Command.Parameters.AddWithValue("@NAME", UserName);
            Command.Parameters.AddWithValue("@PASSWORD", Password);
            Reader = Command.ExecuteReader();
            Reader.Read();
            if (Reader.HasRows)
            {
                Session["ID"] = Reader["ID"];
                Session["NAME"] = Reader["NAME"];
                Session["DEPARTMENT"] = Reader["DEPARTMENT"];

                switch (Reader["DEPARTMENT"].ToString())
                {
                    case "Admin":
                        ReturnValue = "Admin";
                        break;
                    case "Editing":
                        ReturnValue = "Editing";
                        break;
                    case "Sales and Support":
                        ReturnValue = "Sales and Support";
                        break;
                    case "Writing":
                        ReturnValue = "Writing";
                        break;
                    default:
                        ReturnValue = "Sorry";
                        break;
                }
            }
        }
        catch (Exception exp)
        {
            Response.Write(exp.Message.ToString());
        }
        return ReturnValue;
    }

现在我的问题是我是否需要在使用语句块时关闭Connection?什么是关闭连接的最佳方式? (把它放在finally块中?每个try语句?)我是否也应该使用带有SqlReader和SqlCommand的using语句?请告诉我摆脱未使用的连接的最佳方法,以便我可以解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:2)

问题可能与SqlDataReader对象无关,而该对象未关闭。尝试using阻止:

using (var Reader = Command.ExecuteReader())
{

作为旁注,如果没有找到行,Read函数将返回false。所以你可以缩短它:

Reader.Read();
if (Reader.HasRows)
{

为:

if (Reader.Read())
{

答案 1 :(得分:0)

不,当它存在使用块时,它将Dispose,它将关闭并将其返回到池中。问题出在其他地方,或者你错过了一个。

Does End Using close an open SQL Connection