连接尝试失败,因为被连接方在一段时间后没有正确响应.当从c#调用存储过程时



我试图从我的mysql数据库调用存储过程下面是我的c#程序的代码,我一直得到相同的错误

SocketException:连接失败,原因是连接失败当事人在一段时间后没有适当回应,或者成立连接失败,因为连接的主机没有响应。

在数据库中查找存储过程是否正常工作,因此是否有一种方法可以检查该过程何时完成(第一次问关于堆栈溢出的问题,我希望我提供了足够的信息,如果有任何其他的让我知道)

这是我的c#代码

public void BasicCveInfoFill()
{
MySqlTransaction transaction = null;
try
{
using(MySqlConnection conn = GetConnection())
{
conn.Open();
using(MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection= conn;
cmd.Transaction = transaction;                     
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = @"cveTableFill";                        
var rows = cmd.ExecuteNonQuery();                        
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}

GetConnection方法(切换到随机数据库)

public MySqlConnection GetConnection()
{
string connString = @"server=localhost;user=root;database=test;password=";
MySqlConnection conn = new MySqlConnection(connString);
return conn;
}

,这是存储过程

的代码
DROP PROCEDURE IF EXISTS cveTableFill;
DELIMITER ;;
CREATE PROCEDURE cveTableFill()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SELECT COUNT(*) FROM cpe INTO n;
SET i=0;
WHILE i<n DO 
INSERT IGNORE INTO cve(cve_name, cpeMatchCount) SELECT c.cveMatch, COUNT(c.cveMatch) FROM cpe c GROUP BY c.cveMatch HAVING COUNT(c.cveMatch);
SET i = i + 1;
END WHILE;
End;;
DELIMITER ;

这是完整的异常

MySql.Data.MySqlClient.MySqlException(0x80004005):执行命令时遇到致命错误。——比;MySql.Data.MySqlClient.MySqlException (0x80004005):致命错误试图读取结果集时遇到。——比;MySql.Data.MySqlClient.MySqlException (0x80004005):从流失败。——比;System.IO.IOException:无法读取数据来自传输连接:连接尝试失败,因为被连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机失败回应. .——比;System.Net.Sockets.SocketException (10060): A连接尝试失败,因为被连接方没有正确连接一段时间后响应,或者建立的连接失败因为连接的主机响应失败。在System.Net.Sockets.NetworkStream。读取(Byte[] buffer, Int32偏移量)Int32 count)——内部异常堆栈跟踪结束——atSystem.Net.Sockets.NetworkStream。读取(Byte[] buffer, Int32偏移量)mysql . data . mysqlclient . timestream . read (Byte) []缓冲区,Int32偏移量,Int32计数)atMySql.Data.MySqlClient.MySqlStream。readfull (Stream Stream, Byte[])缓冲区,Int32偏移量,Int32计数)atMySql.Data.MySqlClient.MySqlStream.LoadPacket ()MySql.Data.MySqlClient.MySqlStream.LoadPacket ()MySql.Data.MySqlClient.MySqlStream.ReadPacket ()MySql.Data.MySqlClient.NativeDriver.GetResult (Int32&affectedRow,Int64&MySql.Data.MySqlClient.Driver.GetResult(Int32 . data . mysqlclient . driver . gettresultstatementId Int32&affectedRows Int64&insertedId)MySql.Data.MySqlClient.Driver。NextResult(Int32 statementId, BooleanMySql.Data.MySqlClient.MySqlDataReader.NextResult() atMySql.Data.MySqlClient.MySqlDataReader.NextResult ()MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior行为)MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at . data . mysqlclient . mysqlcommand . executenonquery (VulnerabilityDB.SighburDatabaseConnect.BasicCveInfoFill ()C: 开发电脑 PcsProjects SbomArenaC VulnerabilityDB SighburDatabaseConnect.cs:行65

尝试从您的命令中删除超时

cmd。CommandTimeout = 0;

命令默认超时时间为30秒

https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.commandtimeout

等待命令执行的时间,单位为秒。默认为30秒。

检查旧连接的连接状态

myConnection.State == ConnectionState.Closed  

连接尝试失败,因为被连接方在一段时间后没有正确响应,或者由于连接的主机未能响应,已建立的连接失败。

客户端可以访问服务器的ip地址。服务器可能没有监听端口

引用:检查主机名/端口是否正确,服务器是否在线,防火墙是否丢弃数据包等。

错误连接超时。连接尝试失败,因为被连接方在一段时间后没有正确响应,或者已建立的连接失败,因为连接的主机未能响应。

最新更新