我正在尝试通过以下代码模拟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); } }
答案 0 :(得分:0)
您能否告诉我order_line表中有多少条记录,以便我们可以找出附加的内容?通常,对上下文连接执行命令时,CommandTimeout无效(在连接字符串中使用" context connection = true"打开SqlConnection).CommandTimeout是累计超时(对于所有网络数据包都是在调用方法期间读取)在命令执行或处理结果期间进行所有网络读取。返回第一行后仍可能发生超时,并且不包括用户处理时间,仅包括网络读取时间。
例如,超时10秒,如果Read需要两个网络数据包,那么它有10秒钟来读取两个网络数据包。如果再次调用Read,则还有10秒钟读取所需的任何数据。 (从msdn复制)。你需要更多解释,兄弟?