2014-10-09 79 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(); 
} 
相關問題