2014-10-09 85 views
0

我一直在面对这个超时的问题。我一直在使用MYSQL数据库并在Windows应用程序上工作。我甚至曾尝试使用having子句,但面临着同样的情况获取超时过期。从池中获取连接之前已经超时的时间段

public bool VerifyStock(string serialnumber) 
    { 
     con = new MySqlConnection(connstring); 

     string readData = "select * from Fn_Inventory where ModelNumber = '" + serialnumber + "'"; 

     cmd = new MySqlCommand(readData, con); 
     cmd.Parameters.AddWithValue("@ModelNumber", serialnumber); 


     con.Open(); 

     dr = cmd.ExecuteReader(); 

     if (dr.HasRows) 
     { 
      //while (dr.Read()) 
      if (dr.Read()) 
      { 

       decimal invquntity = Convert.ToDecimal(dr["AvailableQuantity"].ToString()); 

       decimal quantity = Convert.ToDecimal(txtQuantity.Text); 

       decimal sinvquntity = invquntity - quantity; 
       if (sinvquntity >= 0) 
       { 
        return false; 
       } 
       else 
       { 
        return true; 
       } 

      } 
      else 
      { 
       return false; 
      } 
     } 
     else 
     { 
      return false; 
     } 
     con.Close(); 
    } 
+2

您应该总是使用[参数化查询](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)。这种字符串连接对于[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻击是开放的。并使用['using'语句](http://msdn.microsoft.com/zh-cn/library/yh598w02.aspx)来处理数据库连接。 – 2014-10-09 06:06:16

回答

0

您正在打开的连接,但根据你的条件不关闭它,并使用return语句要么有着密切的联系,从代码返回在任何你正在使用return语句或使用using()子句。当连接保持打开状态时,将没有可用的连接,因此池将满。 当您完成从数据读取器读取值时,始终关闭连接。

using (SqlConnection con = new SqlConnection()) { //your code here} 
1

增加连接池大小和超时将是一个快速修复。您可以参考here以获取更多信息

并正确关闭打开的连接并结束外部条件。使用try catch finally块并在finally块中添加此代码,以使其始终执行。

if (con.State == ConnectionState.Open) 
{ 
    con.Close(); 
} 
相关问题