MySql.Data.MySqlClient.MySqlException超时过期c#

时间:2016-08-24 02:57:22

标签: c# linq stored-procedures timeoutexception

我收到错误

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

1 个答案:

答案 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
        }
    }
}