我收到错误
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:连接尝试失败因为使用了 连接方在一段时间后没有正确回应,或者 esta blished连接失败,因为连接的主机失败了 回应---> Syst em.IO.IOException:无法从中读取数据 传输连接:连接尝试失败,因为 关联方在一段时间后没有正确回应,或者 建立的连接失败,因为连接的主机有故障 响应。 ---> System.Net.Sockets.SocketException:连接尝试 因为关联方在a之后没有正确回应而失败了 一段时间,或建立的连接失败,因为连接 主持人没有回应 System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量, Int32 s ize)---内部异常堆栈跟踪结束--- at System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量, Int32 s ize)在MyNetworkStream.Read(Byte []缓冲区,Int32偏移量, Int32计数)---内部异常堆栈跟踪结束--- at MyNetworkStream.HandleOrRethrowException(Exception e)at MyNetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32计数)at MySql.Data.MySqlClient.TimedStream.Read(Byte []缓冲区,Int32偏移量, Int32计数)在System.IO.BufferedStream.Read(Byte []数组,Int32 offset,Int32 count)at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream,Byte [] 缓冲区,Int32偏移量,Int32计数)at MySql.Data.MySqlClient.MySqlStream.LoadPacket()at MySql.Data.MySqlClient.MySqlStream.ReadPacket()at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, INT32和放大器;我插入了。) MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)at at MySql.Data.MySqlClient.MySqlDataReader.NextResult()at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(的CommandBehavior 行为) MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbort(抗辩 n ex)at 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 [] datatables,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand comand,CommandBehavior behavior)at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令, CommandBehavior行为)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,String srcTable)在DeadPool.Database.MySqlReader..ctor(MySqlCommand 命令)在C:\ Users \ Admi中 nistrator \桌面\ newSource的\来源\数据库\ MySQL的\ MySqlReader.cs:行 26在DeadPool.Database.SkillTable.LoadSpells(GameState客户端)中 C:\ Users \用户ADMI nistrator \ Desktop \ NewSource \ Source \ Database \ SkillTable.cs:第161行 在DeadPool.Database.SkillTable.LoadSpells(GameState客户端, MySqlConnection conn)中 C:\用户\管理员\桌面\ newSource的\来源\数据库\ SkillTable.cs: 在DeadPool.Client.GameState.LoadData(布尔值loadFake)中的第184行 C:\ Users \用户Administr ator \ Desktop \ NewSource \ Source \ Client \ GameState.cs:第6290行 DeadPool.Network.PacketHandler.DoLogin(GameState客户端)中 C:\用户\ ADMIN istrator \ Desktop \ NewSource \ Source \ Network \ PacketHandler.cs:第27490行 在DeadPool.Network.PacketHandler.AppendConnect(连接appendConnect, GameSt吃了客户端) C:\用户\管理员\桌面\ newSource的\来源\网络\ PacketHan dler.cs:第27434行 DeadPool.Network.PacketHandler.HandlePacket(Byte []包,GameState clien t)in C:\用户\管理员\桌面\ newSource的\来源\网络\ PacketHandler.cs:L 在DeadPool.Program.processData(Byte []缓冲区,Int32的ine 2494 长度,GameState客户端) C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Program.cs:第1353行 at DeadPool.Program.GameServer_OnClientReceive(Byte [] buffer,Int32 length,C lientWrapper obj)in C:\ Users \ Administrator \ Desktop \ NewSource \ Source \ Program.cs:第1336行 at DeadPool.Network.Sockets.ClientWrapper.doReceive(Int32 available) 在C:\我们 ERS \管理\桌面\ newSource的\来源\网络\插座\ ClientWrapper.cs:行 121
答案 0 :(得分: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
}
}
}