我更频繁地面对这个超时问题。我一直在使用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();
}
答案 0 :(得分:1)
增加连接池大小和超时将是一个快速解决方案。您可以参考here了解更多信息
正确关闭打开的连接和结束外部条件。使用try catch finally
块并在finally
块中添加此代码,以便始终执行。
if (con.State == ConnectionState.Open)
{
con.Close();
}
答案 1 :(得分:0)
您正在打开连接,但没有根据您的条件关闭它,并使用return语句返回代码,无论您使用return语句还是使用using()子句,都要关闭连接。当连接保持打开状态时,将无法连接到使用所以池将是满的。 完成从datareader读取值后,始终关闭连接。
using (SqlConnection con = new SqlConnection()) { //your code here}