Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命令执行期间遇到致命错误_C#_Mysql - Fatal编程技术网

C# 命令执行期间遇到致命错误

C# 命令执行期间遇到致命错误,c#,mysql,C#,Mysql,当我从c#代码在远程mysql上执行存储过程时,会出现一般错误: “执行命令时遇到致命错误” 全部详情: MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset. --

当我从c#代码在远程mysql上执行存储过程时,会出现一般错误: “执行命令时遇到致命错误” 全部详情:

MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. --->  MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset. --->  MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed.
--->  System.IO.EndOfStreamException: Attempted to read past the end of the stream.    at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)    at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
--- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlStream.LoadPacket() at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)    at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)    at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)    at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
--- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)    --- End of inner exception stack trace ---    at MySql.Data.MySqlClient.MySqlCommand.EndExecuteNonQuery(IAsyncResult asyncResult
)

我的c#代码:

sp与此相同:

DELIMITER $$


CREATE  PROCEDURE `SPInsertUpdateCity`( in SP_CityName VARCHAR(100) charset utf8, in SP_CitySynonyms varchar(100) charset utf8, in SP_CityNumberPostOffice varchar(100)) BEGIN   if(not exists(select CityID from city where CityName = SP_CityName)) then      insert into city(CityName, CityNumberPostOffice) values(SP_CityName, SP_CityNumberPostOffice);      insert into citysynonym (CityID, CitySynonymName) values(Last_insert_id(),SP_CitySynonyms);      else if(not exists( select  CitySynonymID from    citysynonym where   CitySynonymName = SP_CitySynonyms)) then    
                insert into citysynonym (CityID, CitySynonymName) values((select cityid from city where CityName=SP_CityName), SP_CitySynonyms);     end if;    end if; END$$

DELIMITER ;
连接字符串:

Server=XXXX; Port=XXXX; Database=XXXX; Uid=XXXX;Pwd=XXXX;charset=utf8;default command timeout=7200;
但当我在本地mysql上实现这一点时,它也成功了!
对于远程mysql,我尝试发送少量数据(3条记录)并成功执行,但对于大数据(1500条记录),执行失败

如果在这里执行多个操作,代码中可能存在线程安全问题,使用
AsyncWaitHandle
而不是对
IAsyncResult
IsComplete
属性进行轮询,可以从中获益

在执行查询时,我遇到了这个问题,因为我的查询占用的时间超过了我的MysqlCommand CommandTimeout默认值。因此,我只是增加了这个时间,之后就没有了这样的错误

MysqlCommand cmd = new MysqlCommand();
cmd.CommandTimeout = 200;
非常感谢,我添加了while(!myResult.IsCompleted){myResult.AsyncWaitHandle.WaitOne();},解决了我的问题!再次感谢。
MysqlCommand cmd = new MysqlCommand();
cmd.CommandTimeout = 200;