我正在建立一个MySQL类来连接到MySQL数据库。最初连接数据库时,通过SELECT
语句请求的任何数据都会按预期返回。当第二次尝试连接时,SocketException
抛出a。
这是该SELECT
方法的当前实现
public DataSet Select(string command)
{
DataSet dataSet = new DataSet();
using (MySqlConnection conn = new MySqlConnection(LoadConnectionString()))
{
using (MySqlDataAdapter adapter = new MySqlDataAdapter())
{
MySqlCommand cmd = new MySqlCommand(command, conn);
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
}
}
return dataSet;
}
像这样从foreach循环调用此方法
foreach (KeyValuePair<int, string> i in sqlCalls)
{
Select(i.Value);
}
这是第二个呼叫时引发的错误
MySql.Data.MySqlClient.MySqlException: '命令执行期间遇到致命错误。
SocketException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应
我在第一次通话中没有正确处置某些东西吗?
在这种情况下,我的连接字符串如下
Server=[server];Database=[db];Port=3306;Uid=[uid];Pwd=[pwd];Connect Timeout=120;
我添加了几个调试命令来给命令计时,并注意到命令在60秒后超时。这让我感到困惑,因为连接超时已经设置。我决定查看MySqlCommand
该类的文档,并注意到CommandTimeout属性。
明确定义此属性后,所有功能都可以正常工作。这是完整的实现;
public DataSet Select(string command)
{
string connString = LoadConnectionString();
DataSet dataSet = new DataSet();
using (MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
using (MySqlDataAdapter adapter = new MySqlDataAdapter())
{
Console.WriteLine(conn.State);
MySqlCommand cmd = new MySqlCommand(command, conn);
cmd.CommandTimeout = 120;
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
}
conn.Close();
}
return dataSet;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句