11

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

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

增加连接字符串中的连接超时无济于事;我从

连接超时=28800

连接超时=128800

但尽管发生了这种变化,我仍然收到错误消息。

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

除了“查询所用的时间”之外,是否还有其他因素会产生此异常?

4

3 回答 3

22

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

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

于 2012-07-16T19:39:45.283 回答
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);

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

于 2012-07-16T18:13:31.143 回答
3

您也可以尝试在连接字符串中添加“默认命令超时=360”;例如

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

此选项在 Connector/NET 版本 5.1.4 中可用。

[我从connectionstrings.com/mysql/

于 2014-09-02T23:11:44.583 回答