MySql.Data.MySqlClient.MySqlException超时c#

问题描述 投票:0回答:1

我遇到错误

MySql.Data.MySqlClient.MySqlException超时已过期

在此中,MySqlReader

我的代码

public MySqlReader(MySqlCommand command)
        {
            if (command.Type == MySqlCommandType.SELECT)
            {
                _dataset = new DataSet();
                _row = 0;
                using (MySql.Data.MySqlClient.MySqlConnection conn = DataHolder.MySqlConnection)
                {
                    conn.Open();
                    using (var DataAdapter = new MySqlDataAdapter(command.Command, conn))
                        DataAdapter.Fill(_dataset, Table);
                    ((IDisposable)command).Dispose();  // in this line
                }
            }
        }

我该怎么解决?

完整错误:

[[04:46:58] MySql.Data.MySqlClient.MySqlException(0x80004005):超时过期了在完成之前,超时时间已过操作或服务器没有响应。 ->System.TimeoutException:连接尝试失败,因为使用了关联方在一段时间后未正确响应,或者建立连接失败,因为连接的主机无法响应---> Syst em.IO.IOException:无法从传输连接:尝试连接失败,因为关联方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机失败响应。 ---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间,或由于连接而建立的连接失败主机在未能回应System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小)-内部异常堆栈跟踪的结尾-在System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,MyNetworkStream.Read(Byte [] buffer,Int32 offset,Int32计数)-内部异常堆栈跟踪的结尾-在MyNetworkStream.HandleOrRethrowException(Exception e)在MyNetworkStream.Read(Byte [] buffer,Int32 offset,Int32 count)在MySql.Data.MySqlClient.TimedStream.Read(Byte [] buffer,Int32 offset,Int32计数)位于System.IO.BufferedStream.Read(Byte [] array,Int32偏移量,Int32计数)在MySql.Data.MySqlClient.MySqlStream.ReadFully(流流,字节[]缓冲区,Int32偏移量,Int32计数)MySql.Data.MySqlClient.MySqlStream.LoadPacket()在MySql.Data.MySqlClient.MySqlStream.ReadPacket()在MySql.Data.MySqlClient.NativeDriver.GetResult(Int32&受影响的行,Int32&i nsertedId)MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)在MySql.Data.MySqlClient.MySqlDataReader.NextResult()在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior行为)MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbort(Exception ex)在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior行为)MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior行为)System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandB行为)System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集,DataTable []数据表,Int32 startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)位于System.Data.Common.DbDataAdapter.Fill(数据集dataSet,Int32startRecord,Int32 maxRecords,String srcTable,IDbCommand命令,CommandBehavior行为)

在System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,StringsrcTable)在DeadPool.Database.MySqlReader..ctor(MySqlCommand命令)在C:\ Users \ Admi中nistrator \ Desktop \ NewSource \ Source \ Database \ MySql \ MySqlReader.cs:line26在DeadPool.Database.SkillTable.LoadSpells(GameState客户端)中C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Database \ SkillTable.cs:第161行在DeadPool.Database.SkillTable.LoadSpells(GameState客户端,MySqlConnection conn)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Database \ SkillTable.cs:在DeadPool.Client.GameState.LoadData(Boolean loadFake)中的第184行C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Client \ GameState.cs:第6290行位于DeadPool.Network.PacketHandler.DoLogin(GameState客户端)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Network \ PacketHandler.cs:line 27490在DeadPool.Network.PacketHandler.AppendConnect(Connect appendConnect,GameSt ate客户端)C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Network \ PacketHandler.cs:第27434行位于DeadPool.Network.PacketHandler.HandlePacket(Byte []数据包,GameStateclien t)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Network \ PacketHandler.cs:l在DeadPool.Program.processData(Byte [] buffer,Int32上的2494长度,GameState Client)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Program.cs:line 1353在DeadPool.Program.GameServer_OnClientReceive(Byte [] buffer,Int32长度,C lientWrapper obj)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Program.cs:第1336行在DeadPool.Network.Sockets.ClientWrapper.doReceive(Int32可用)在C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Network \ Sockets \ ClientWrapper.cs:line121

c# linq stored-procedures timeoutexception
1个回答
0
投票

通过设置命令对象属性:CommandTimeout增加超时。我相信默认值为30(以秒为单位)。

因此,您的更新方法:

public MySqlReader(MySqlCommand command)
{
    //HERE!!!!
    command.CommandTimeout = 60;

    if (command.Type == MySqlCommandType.SELECT)
    {
         _dataset = new DataSet();
         _row = 0;
         using (MySql.Data.MySqlClient.MySqlConnection conn = 
             DataHolder.MySqlConnection)
         {
             conn.Open();
             using (var DataAdapter = new MySqlDataAdapter(command.Command, conn))
                  DataAdapter.Fill(_dataset, Table);
                 ((IDisposable)command).Dispose();  // in this line
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.