随着数据库大小的增加,我的查询执行时间更长。查询已经过优化和必要,但我的C#控制台应用程序最近给了我这个错误:
Unhandled Exception: MySql.Data.MySqlClient.MySqlException: Timeout expired.
增加连接字符串中的连接超时没有用;我从
增加了它连接超时= 28800
到
连接超时= 128800
但是尽管有这种变化,我仍然会收到错误。
如果我从MySQL工作台运行查询,它只需要大约10秒,所以我不知道如何防止这种未处理的异常。
除了“查询所花费的时间”之外还有其他什么可以产生这种异常吗?
答案 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获得。
取消了这个