Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# ExecuteReader上的Mysql异常_C#_Mysql_Exception_Mysqldatareader - Fatal编程技术网

C# ExecuteReader上的Mysql异常

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

我的程序中有一个奇怪的异常,所以我尝试复制它来向大家展示,所以我所做的是创建一个id为(int-11 primary)、title为(varchar-255)的表,并生成100k个长度为40个字符的随机标题,当我运行我的方法读取每个id的计数时,它会抛出下面的异常检查以了解更多信息

我发现这是因为超时,所以我尝试了超时

  • 设置净写入超时=99999;设置网络读取超时=99999
  • 已尝试在连接上使用池=true
  • 尝试cmd.timeout=120 我还尝试添加MaxDegreeOfParallelism,我使用了多个值,但过了一会儿仍然出现相同的错误

    我的例外:

    无法终止查询,正在中止连接。无法创建异常 从传输连接读取数据:连接尝试失败 因为关联方在一段时间后未作出适当回应 时间,或建立的连接失败,因为连接的主机已 没有回应


    这是什么原因造成的?有什么线索吗?

    所以最后我的解决方案是增加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;
        }
    }