0

次のコードで MySql CommandTimeout Exception をシミュレートしようとしています。CommandTimeout が 3 秒間あり、クエリの実行に約 30 秒かかります。このコードが機能しないのはなぜですか? 私は何か間違っていますか?

接続文字列に commandtimeout はありません。

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

助けてください。

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

    cmd.CommandTimeout = 3; // デフォルトは 30 秒
    試す {
        DateTime 開始 = DateTime.Now;
        cmd.Connection.Open();
        using (MySqlDataReader リーダー = cmd.ExecuteReader()){
            while (reader.Read()){

            }
            DBFactory.CloseReader(リーダー);
        }
        cmd.Connection.Close();
        DateTime end = DateTime.Now;

        TimeSpan ts = 終了 - 開始;

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

    } catch (例外例) {
        Response.Write(ex.Message);
    } 最後に {
        DBFactory.CloseConnection(cmd);
    }
}
4

1 に答える 1

1

order_line テーブルにいくつのレコードが追加されているか教えていただけますか? 通常、CommandTimeout は、コマンドがコンテキスト接続 (接続文字列に "context connection=true" で開かれた SqlConnection) に対して実行された場合には効果がありません。CommandTimeout は累積タイムアウトです (コマンドの実行中または結果の処理中のすべてのネットワーク読み取り。最初の行が返された後もタイムアウトが発生する可能性があり、ユーザーの処理時間は含まれず、ネットワークの読み取り時間のみが含まれます。

たとえば、タイムアウトが 10 秒の場合、Read に 2 つのネットワーク パケットが必要な場合、両方のネットワーク パケットを読み取るのに 10 秒かかります。Read を再度呼び出すと、必要なデータを読み取るためにさらに 10 秒かかります。(msdn からコピー)。もっと説明が必要ですか、仲間?

于 2016-06-13T16:11:09.243 に答える