C#-使用MySQL执行命令时发生致命错误

C#-使用MySQL执行命令时发生致命错误,c#,mysql,fatal-error,C#,Mysql,Fatal Error,我尝试在MySQL数据库中插入数据,使用C#作为前端。查询正在windows服务应用程序中运行,整个执行在线程上运行。在执行服务两个小时后,我发现一个错误。该服务每隔10分钟运行一次。假设它在早上6:00执行,那么它将在早上6:10再次执行,这样它将按顺序移动。在每次运行中,它在数据库中插入大约50行 下面给出了执行两小时后抛出的错误。这是我的错误日志中的一个示例 命令执行期间遇到InsertData中的MySqlException致命错误 执行:::在 MySql.Data.MySqlClie

我尝试在MySQL数据库中插入数据,使用C#作为前端。查询正在windows服务应用程序中运行,整个执行在线程上运行。在执行服务两个小时后,我发现一个错误。该服务每隔10分钟运行一次。假设它在早上6:00执行,那么它将在早上6:10再次执行,这样它将按顺序移动。在每次运行中,它在数据库中插入大约50行

下面给出了执行两小时后抛出的错误。这是我的错误日志中的一个示例

命令执行期间遇到InsertData中的MySqlException致命错误 执行:::在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior (行为) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()中 位于MySql.Data.MySqlClient.SchemaProvider.GetProcedures(字符串[]限制) 位于MySql.Data.MySqlClient.ISSchemaProvider.GetProcedures(字符串[]) (限制) 位于MySql.Data.MySqlClient.ISSchemaProvider.GetSchemaInternal(字符串 集合,字符串[]限制) 位于MySql.Data.MySqlClient.SchemaProvider.GetSchema(字符串集合,字符串[]限制) 位于MySql.Data.MySqlClient.MySqlConnection.GetSchema(String collectionName,String[]restrictionValues) 位于MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection 连接,字符串(名称) 位于MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection-connection,String-spName) 位于MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection 连接,字符串(名称) 位于MySql.Data.MySqlClient.StoredProcedure.GetParameters(字符串procName) 在MySql.Data.MySqlClient.StoredProcedure.Resolve(布尔值) 位于MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior (行为) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()处 在InsertData(字符串名称、字符串信息、字符串输出):内部异常1:致命错误 尝试读取结果集时遇到错误。::内部异常2: 读取流失败。::内部异常3:无法 从传输连接读取数据:执行了阻塞操作 被对WSACancelBlockingCall的调用中断。::内部异常4:a 对WSACancelBlockingCall的调用中断了阻塞操作]

我在日志中添加了多达四个级别的内部异常,以便可以找到一些线索。内部异常开始有标题“内部异常1”、“内部异常2”等等

下面是我的代码。

internal static int UpdateDataInToDB(DataInformation info)
{
    MySqlCommand mySqlCommand = new MySqlCommand("ProcInsertData", mySqlCon);
    try
    {
        int rowCount = 0;

        mySqlCommand.CommandType = CommandType.StoredProcedure;
        mySqlCommand.Parameters.Add("@Param1", DbType.Int64).Value = info.ID;
        mySqlCommand.Parameters.Add("@Param2", DbType.String).Value = info.Name;
        mySqlCommand.Parameters.Add("@Param3", DbType.String).Value = info.Address;
        mySqlCommand.Parameters.Add("@Param4", DbType.Int32).Value = info.Age;
        mySqlCommand.Parameters.Add("@Param5", DbType.DateTime).Value = info.DOB;
        mySqlCommand.Parameters.Add("@Param6", DbType.Int32).Value = info.RollNo;

        mySqlCommand.CommandTimeout = 120;
        rowCount = Convert.ToInt32(mySqlCommand.ExecuteNonQuery());


    }
    catch (MySqlException ex)
    {
        //MySqlException logging
        ResetDBConnection();
    }
    catch (Exception ex)
    {
        //Exception logging
    }
    finally
    {
        if (mySqlCommand != null) mySqlCommand.Dispose();
        mySqlCon.CloseConnection();
    }

return rowCount;
}
我在代码中没有使用任何DataReader,但我不知道这个ExecuteReader在哪里显示代码抛出的错误文本。我在连接字符串中设置了“pooling=false”


任何帮助都将不胜感激。

您将在最后一步中处理哪个mySqlCommand对象?因为try中的mySqlCommand对象不在finally中的作用域中。使用块在这里更容易使用。抱歉@Polyfun我编辑了我的代码。mySqlCommand对象不在try块的范围内。实际上,这是一个伪代码,我没有在这里粘贴我的实际代码,这违反了我所在组织的政策。它看起来像MySql。当试图从数据库中获取有关存储过程的信息时,数据失败了(我不太清楚原因)。每次执行存储过程时都会发生这种情况,因为
Pooling=false
。因此,您可以通过更改为
Pooling=true
来解决此问题。最初,Pooling=true是在app.config中设置的。在这种情况下,即使我关闭了mySQL连接,它也达到了最大池大小。我在谷歌上搜索发现,我们可以通过设置pooling=false来避免这种情况。因此,我按照建议设置它。任何人都可以查看内部异常。最后一个是内部异常4:对WSACancelBlockingCall的调用中断了阻塞操作。那么,这场WSACancelBlockingCall的演奏是什么呢。为什么会有阻塞操作?是否为应用程序中正在使用的线程操作?