我遇到错误
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
通过设置命令对象属性: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
}
}
}