Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从池中获取连接之前经过的超时时间_C#_Mysql_Sql - Fatal编程技术网

C# 从池中获取连接之前经过的超时时间

C# 从池中获取连接之前经过的超时时间,c#,mysql,sql,C#,Mysql,Sql,我的作业代码有问题。我们必须创建一些更新用户的数据库,但我发现这些错误和程序崩溃。。 这是完整的错误代码,有错误代码 错误:MySql.Data.MySqlClient.MySqlException 0x80004005:错误 连接:超时已过期。在此之前已过超时时间 正在从池中获取连接。这可能是因为 所有池连接都在使用中,已达到最大池大小 我尝试使用query.CommandTimeout=60;但我认为这没用,你怎么看 MySqlConnection connect = new M

我的作业代码有问题。我们必须创建一些更新用户的数据库,但我发现这些错误和程序崩溃。。 这是完整的错误代码,有错误代码

错误:MySql.Data.MySqlClient.MySqlException 0x80004005:错误 连接:超时已过期。在此之前已过超时时间 正在从池中获取连接。这可能是因为 所有池连接都在使用中,已达到最大池大小

我尝试使用query.CommandTimeout=60;但我认为这没用,你怎么看

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注入攻击。