【问题标题】:Getting Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool获取超时已过期。在从池中获取连接之前经过的超时时间
【发布时间】:2014-10-09 05:42:36
【问题描述】:

我经常遇到这个超时问题。我一直在使用 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();
    }

【问题讨论】:

标签: c# mysql .net


【解决方案1】:

增加连接池大小和超时将是一个快速解决方案。您可以参考here了解更多信息

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

if (con.State == ConnectionState.Open)
{
     con.Close();
}

【讨论】:

    【解决方案2】:

    您正在打开连接,但没有根据您的条件关闭它,并使用 return 语句从代码返回,或者关闭您使用 return 语句的连接或使用 using() 子句。当连接保持打开状态时,将没有免费连接使用所以池将满。 从 datareader 读取值后,请始终关闭连接。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2014-07-07
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多