MySqlException:超时已过期 - 增加连接超时没有效果

时间:2012-07-16 17:55:01

标签: c# mysql connection-timeout

随着数据库大小的增加,我的查询执行时间更长。查询已经过优化和必要,但我的C#控制台应用程序最近给了我这个错误:

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

增加连接字符串中的连接超时没有用;我从

增加了它
  

连接超时= 28800

  

连接超时= 128800

但是尽管有这种变化,我仍然会收到错误。

如果我从MySQL工作台运行查询,它只需要大约10秒,所以我不知道如何防止这种未处理的异常。

除了“查询所花费的时间”之外还有其他什么可以产生这种异常吗?

3 个答案:

答案 0 :(得分:20)

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

然而,

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

答案 1 :(得分: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);

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

答案 2 :(得分:2)

你也可以尝试添加&#34;默认命令timeout = 360&#34;在你的连接字符串中;例如

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;default command timeout=20;

此选项可从Connector / NET版本5.1.4获得。

[我从connectionstrings.com/mysql/

取消了这个