C# 从池中获取连接之前经过的超时时间
我的作业代码有问题。我们必须创建一些更新用户的数据库,但我发现这些错误和程序崩溃。。 这是完整的错误代码,有错误代码 错误:MySql.Data.MySqlClient.MySqlException 0x80004005:错误 连接:超时已过期。在此之前已过超时时间 正在从池中获取连接。这可能是因为 所有池连接都在使用中,已达到最大池大小 我尝试使用query.CommandTimeout=60;但我认为这没用,你怎么看C# 从池中获取连接之前经过的超时时间,c#,mysql,sql,C#,Mysql,Sql,我的作业代码有问题。我们必须创建一些更新用户的数据库,但我发现这些错误和程序崩溃。。 这是完整的错误代码,有错误代码 错误:MySql.Data.MySqlClient.MySqlException 0x80004005:错误 连接:超时已过期。在此之前已过超时时间 正在从池中获取连接。这可能是因为 所有池连接都在使用中,已达到最大池大小 我尝试使用query.CommandTimeout=60;但我认为这没用,你怎么看 MySqlConnection connect = new M
MySqlConnection connect = new
MySqlConnection("Server=localhost;Database=Work;Uid=root;Pwd='1234';");
connect.Open();
MySqlCommand query = new MySqlCommand(@"UPDATE user
SET User_Name=@User_Name,User_BankBalance=@User_BankBalance,
User_Password=@User_Password,LottoTimer=@LottoTimer
WHERE User_Name='" + Escape(u.Username) + "'", connect);
using (query)
{
query.CommandType = System.Data.CommandType.Text;
query.Parameters.AddWithValue("@User_Name", Escape(u.Username));
query.Parameters.AddWithValue("@User_BankBalance", u.BankBalance);
query.Parameters.AddWithValue("@User_Password", u.Password);
query.Parameters.AddWithValue("@LottoTimer", u.LottoTimer);
query.Dispose();
query.Prepare();
query.ExecuteNonQuery();
}
connect.Close();
return;
您的方法应该如下所示:
string query =
@"UPDATE user SET"
+ " User_Name=@User_Name,"
+ " User_BankBalance=@User_BankBalance,"
+ " User_Password=@User_Password,"
+ " LottoTimer=@LottoTimer"
+ " WHERE User_Name='" + Escape(u.Username) + "'";
using( var connect = new MySqlConnection("Server=localhost;Database=Work;Uid=root;Pwd='1234';"))
using( var query = new MySqlCommand(query, connect))
{
connect.Open();
query.CommandType = System.Data.CommandType.Text;
query.Parameters.AddWithValue("@User_Name", Escape(u.Username));
query.Parameters.AddWithValue("@User_BankBalance", u.BankBalance);
query.Parameters.AddWithValue("@User_Password", u.Password);
query.Parameters.AddWithValue("@LottoTimer", u.LottoTimer);
query.Prepare();
query.ExecuteNonQuery();
}
return;
处理MySqlConnection非常重要,这样它就可以再次用于池。您遇到的问题是,所有连接都在池中使用,并且池正在等待一个连接,直到超时。为什么要处理该命令,然后继续使用它?考虑在使用语句中封装MySQL连接对象。未能处理连接可能会导致使用池中的太多connections对象。请尝试放置数据库的完整路径,包括文件名的扩展名。为什么不为WHERE子句使用参数?这完全容易受到SQL注入攻击。