2011-07-27 68 views
2

我在asp.net开发中相当新,所以你可以说我开发了一个编码不好的应用程序,它给了我这个错误。超时已过期。在从池中获取连接之前已经超时了一段时间

超时已过期。在从池中获取连接之前已超时。

我试着在谷歌搜索,发现这是因为应用程序池中未关闭的连接,所以我仔细检查我的应用程序和使用的关键字所有Sqlconnections插入,但还是我有这个问题的,这里是一些示例代码我的应用程序。所有的Sqlconnections都使用这样的语句。

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; 
    } 

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

谢谢。

回答

2

也许问题是关系到SqlDataReader对象,这是不封闭的。尝试using块:

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

一点题外话,如果没有找到行Read函数返回false。所以,你可以缩短这个:

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

到:

if (Reader.Read()) 
{ 
相关问题