C# 命令执行期间遇到致命错误
当我从c#代码在远程mysql上执行存储过程时,会出现一般错误: “执行命令时遇到致命错误” 全部详情: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. --
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;