为什么我的C#/MySQL连接超时设置被忽略了



我有一个长时间运行的查询,从MySQL普通客户端完成大约需要1分钟。

然而,当我在C#应用程序中运行它时,尽管在连接字符串中将其设置为240秒,但30秒后我似乎会出现标准MySQL连接超时错误。

是否有其他我找不到的超时设置?

错误消息

异常:"在命令执行过程中遇到致命错误。">

InnerException:"从流读取失败。">

InnerException:"无法从传输连接读取数据:由于连接方在一段时间后没有正确响应,连接尝试失败,或者由于连接的主机没有响应,建立的连接失败。">

代码

public static string GetMySQLconnectionString()
{
MySqlConnectionStringBuilder conn_string = new MySqlConnectionStringBuilder();
conn_string.Server             = "127.0.0.1";
conn_string.Port               = 4302;
conn_string.UserID             = "root";
conn_string.Password           = "";
conn_string.Database           = "my_database";
conn_string.CharacterSet       = "utf8";
conn_string.SslMode            = MySqlSslMode.None;
conn_string.ConnectionTimeout  = 240;
return conn_string.ToString();
}
internal static string getTotalSitesThatStillNeedDNSChecking()
{
try
{
using (MySql.Data.MySqlClient.MySqlConnection dbConnUpdate = new MySql.Data.MySqlClient.MySqlConnection(GetMySQLconnectionString()))
{
dbConnUpdate.Open();
MySqlCommand command = dbConnUpdate.CreateCommand();
command.CommandText = "SELECT count(*) as counter FROM all_domains WHERE last_dns_check IS NULL";
MySqlDataReader reader = command.ExecuteReader();
if (!reader.HasRows) return "0";
reader.Read();
return (string)reader["counter"].ToString();
}
}
catch (Exception ex) { Logger.AddError("error - ", ex, "grand-total-stat-calculator"); return "0"; }
}

需要像那样设置CommandTimeout

try
{
using (MySql.Data.MySqlClient.MySqlConnection dbConnUpdate = new MySql.Data.MySqlClient.MySqlConnection(GetMySQLconnectionString()))
{
dbConnUpdate.Open();
MySqlCommand command = dbConnUpdate.CreateCommand();
command.CommandTimeout = 240;
command.CommandText = "SELECT count(*) as counter FROM all_domains WHERE last_dns_check IS NULL";
MySqlDataReader reader = command.ExecuteReader();
if (!reader.HasRows) return "0";
reader.Read();
return (string)reader["counter"].ToString();
}
}
catch (Exception ex) { Logger.AddError("error - ", ex, "grand-total-stat-calculator"); return "0"; }

最新更新