7 Stimmen

.NET: SqlDataReader.Close oder .Dispose führt zur Ausnahme Timeout Expired

Wenn ich versuche, Close oder Dispose auf einem SqlDataReader aufzurufen, erhalte ich eine Timeout ablaufende Ausnahme. Wenn Sie eine DbConnection zu SQL Server haben, können Sie es selbst reproduzieren mit:

String CRLF = "\r\n";
String sql = 
    "SELECT * " + CRLF +
    "FROM (" + CRLF +
    "   SELECT (a.Number * 256) + b.Number AS Number" + CRLF +
    "   FROM    master..spt_values a," + CRLF +
    "       master..spt_values b" + CRLF +
    "   WHERE   a.Type = 'p'" + CRLF +
    "       AND b.Type = 'p') Numbers1" + CRLF +
    "   FULL OUTER JOIN (" + CRLF +
    "       SELECT (print("code sample");a.Number * 256) + b.Number AS Number" + CRLF +
    "       FROM    master..spt_values a," + CRLF +
    "           master..spt_values b" + CRLF +
    "       WHERE   a.Type = 'p'" + CRLF +
    "           AND b.Type = 'p') Numbers2" + CRLF +
    "   ON 1=1";

DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
DbDataReader rdr = cmd.ExecuteReader();
rdr.Close();

Wenn Sie reader.Close() oder reader.Dispose() aufrufen, kommt es zu einer System.Data.SqlClient.SqlException:

  • FehlerCode: -2146232060 (0x80131904)
  • Nachricht: "Zeitüberschreitung abgelaufen. Die Timeout-Periode ist abgelaufen, bevor der Vorgang abgeschlossen wurde, oder der Server antwortet nicht."

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X