C# ExecuteReader上的Mysql异常
我的程序中有一个奇怪的异常,所以我尝试复制它来向大家展示,所以我所做的是创建一个id为(int-11 primary)、title为(varchar-255)的表,并生成100k个长度为40个字符的随机标题,当我运行我的方法读取每个id的计数时,它会抛出下面的异常检查以了解更多信息 我发现这是因为超时,所以我尝试了超时C# ExecuteReader上的Mysql异常,c#,mysql,exception,mysqldatareader,C#,Mysql,Exception,Mysqldatareader,我的程序中有一个奇怪的异常,所以我尝试复制它来向大家展示,所以我所做的是创建一个id为(int-11 primary)、title为(varchar-255)的表,并生成100k个长度为40个字符的随机标题,当我运行我的方法读取每个id的计数时,它会抛出下面的异常检查以了解更多信息 我发现这是因为超时,所以我尝试了超时 设置净写入超时=99999;设置网络读取超时=99999 已尝试在连接上使用池=true 尝试cmd.timeout=120 我还尝试添加MaxDegreeOfParalleli
这是什么原因造成的?有什么线索吗?所以最后我的解决方案是增加net\u read\u timeout变量(我指出net\u write\u timeout,因为在执行长查询时也会发生这种情况) 运行这些查询*注意:重新启动电脑后,将再次出现默认值
set @@global.net_read_timeout = 999;
set @@global.net_write_timeout = 999;
或者,您可以将其添加到连接字符串中
default command timeout=999;
最后,我使用这个方法来读取值
public static int? read_int(string sql, string sconn)
{
try
{
using (MySqlDataReader reader = MySqlHelper.ExecuteReader(sconn, sql))
{
if (reader.HasRows)
{
reader.Read();
return reader.GetInt32(0);
}
else
return null;
}
}
catch (MySqlException ex)
{
//Do your stuff here
throw ex;
}
}
在第一个read_int示例中,您没有关闭读卡器。你对read_int2也有同样的问题吗?实际上在这个表上没有问题,但是在我的方法和实际的表上read_int_2抛出了同样的异常。最后要解决这个问题,你需要调整net_read_timeout并限制查询。我想你可以发布你自己的答案,因为这些信息可能对未来有所帮助读者。
default command timeout=999;
public static int? read_int(string sql, string sconn)
{
try
{
using (MySqlDataReader reader = MySqlHelper.ExecuteReader(sconn, sql))
{
if (reader.HasRows)
{
reader.Read();
return reader.GetInt32(0);
}
else
return null;
}
}
catch (MySqlException ex)
{
//Do your stuff here
throw ex;
}
}