我有一个查询,随着数据库大小的增加,执行该查询需要更长的时间。查询是优化的,也是必要的,但我的C#控制台应用程序最近给了我这个错误:
Unhandled Exception: MySql.Data.MySqlClient.MySqlException: Timeout expired.
增加连接字符串中的连接超时没有帮助;我从中增加了它
连接超时=28800
至
连接超时=128800
但尽管有了这个变化,我还是犯了错误。
如果我从MySQL工作台运行查询,它只需要大约10秒,所以我不知道如何防止这种未处理的异常。
除了"查询所花费的时间"之外,还有其他事情可以产生这种异常吗?
我以前遇到过这个问题。ConnectTimeout属性仅适用于连接到数据库时发生的超时,而不适用于查询。
CommandTimeout但是指定查询返回的等待时间。我认为默认值是30秒。仔细检查MySql库的文档,但对于SqlCommand,CommandTimeout的单位是秒,而不是毫秒。
您也可以尝试在连接字符串中添加"默认命令超时=360";例如
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;default command timeout=20;
此选项可从Connector/NET版本5.1.4中获得。
[我从connectionstrings.com/mysql/
如果您能向我们展示您的方法,我们可以帮助查找错误。
如果说历史(和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);
如果你还没有尝试一下,并发布一些代码:)