MySqlException: 超时 - 增加连接超时时间无效

11

我有一个查询,在数据库增加数据量的情况下执行时间越来越长。这个查询已经被优化并且是必要的,但是我的C#控制台应用程序最近一直给出这个错误:

Unhandled Exception: MySql.Data.MySqlClient.MySqlException: Timeout expired.

在连接字符串中增加连接超时时间并不能帮助解决问题;我将其从

Connect Timeout=28800

增加到了

Connect Timeout=128800

但是我仍然遇到相同的错误。

如果我在MySQL Workbench中运行查询,只需要大约10秒钟,所以我不确定如何防止这个未处理的异常。

除了“查询所需时间”之外,还有其他因素会导致此异常吗?


9
修改CommandTimeout而不是ConnectionTimeout。 - Tim Schmelter
未处理的异常:System.ArgumentException:不支持的关键字。 参数名称:connecttimeout 在Application.MainClass.Main(String[] args)处哦,我需要仔细阅读你,“CommandTimeout”。 - Lonnie Best
2
CommandTimeout是指命令超时时间,而不是ConnectionTimeout连接超时时间。CommandTimeout用于设置执行命令的最大等待时间,如果在此时间内未能执行完毕,则会引发异常。 - Tim Schmelter
公共静态字符串 ConnectionString = "server=192.168.1.2;user=user1;database=database1;port=3306;password=testPW;Pooling=true;Connect Timeout=28800;Command Timeout=28800";我还在测试中。 - Lonnie Best
谢谢Tim!自从我设置了上面连接字符串中显示的命令超时,我就没有遇到超时问题了。 - Lonnie Best
3个回答

23

我以前遇到过这个问题。ConnectTimeout 属性只适用于连接到数据库时发生的超时,而不适用于查询。

CommandTimeout 则指定了等待查询返回的时间。我相信默认值是30秒。请仔细查看您的 MySql 库文档,但对于 SqlCommand,CommandTimeout 的单位是秒而不是毫秒。


3
MySQL中也有秒数,同时,0表示没有超时限制。 - Moshe L

4
你可以尝试在连接字符串中添加 "default command timeout=360",例如:
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;default command timeout=20;

这个选项可在Connector/NET 5.1.4版本及以上版本中使用。
[我从connectionstrings.com/mysql/中提取了此信息。]

3

如果你能展示你的方法,我们可以帮助找到错误。

如果历史(和SO)教给我的任何东西,那就是:

"You better be using Paramaterized SQL statements before posting any code" 

如果您不确定如何使用参数化命令,以下是一个示例(取自其中一个答案,我没有使用参数化SQL)。
var command = new MySqlCommand(
    "SELECT * FROM tblPerson WHERE LastName = @Name AND Height > @Height AND BirthDate < @BirthDate", connection);

command.Parameters.AddWithValue("@Name", lastname);
command.Parameters.AddWithValue("@Height", height);
command.Parameters.AddWithValue("@Name", birthDate);

如果你还没有尝试过,请尝试并发布一些代码 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接