MySql CommandTimeout

时间:2013-09-25 08:03:47

标签: mysql

我正在尝试通过以下代码模拟MySql CommandTimeout异常。 我有一个CommandTimeout 3秒钟,我的查询大约需要30秒才能执行。 为什么这段代码不起作用?我有什么问题吗?

我的connectionstring中没有命令超时。

connectionString="server=localhost; logging=true;user id=*****;pwd=****database=shopdb;port=3306;persist security info=true;allow user variables=false;allow zero datetime=true"

请帮忙。

using (MySqlCommand cmd = new MySqlCommand("select * from order_line", new MySqlConnection("myConnectionString"))) {

    cmd.CommandTimeout = 3; // default 30 seconds
    try {
        DateTime start = DateTime.Now;
        cmd.Connection.Open();
        using (MySqlDataReader reader = cmd.ExecuteReader()){
            while (reader.Read()){

            }
            DBFactory.CloseReader(reader);
        }
        cmd.Connection.Close();
        DateTime end = DateTime.Now;

        TimeSpan ts = end - start;

        Response.Write(ts.Seconds + "." + ts.Milliseconds);

    } catch (Exception ex) {
        Response.Write(ex.Message);
    } finally {
        DBFactory.CloseConnection(cmd);
    }
}

1 个答案:

答案 0 :(得分:0)

您能否告诉我order_line表中有多少条记录,以便我们可以找出附加的内容?通常,对上下文连接执行命令时,CommandTimeout无效(在连接字符串中使用" context connection = true"打开SqlConnection).CommandTimeout是累计超时(对于所有网络数据包都是在调用方法期间读取)在命令执行或处理结果期间进行所有网络读取。返回第一行后仍可能发生超时,并且不包括用户处理时间,仅包括网络读取时间。

例如,超时10秒,如果Read需要两个网络数据包,那么它有10秒钟来读取两个网络数据包。如果再次调用Read,则还有10秒钟读取所需的任何数据。 (从msdn复制)。你需要更多解释,兄弟?