.NET: SqlDataReader.Schließen oder .Entsorgen Sie die Ergebnisse im Zeitablauf Ausnahme

Wenn Sie versuchen zu nennen Close oder Dispose auf ein SqlDataReader-ich bekomme eine timeout expired-exception. Wenn Sie eine DbConnection zu SQL Server, können Sie reproduzieren sich selbst 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 call-reader.Close () - oder der Leser.Dispose() wird es werfen ein System.Daten.SqlClient.SqlException:

  • ErrorCode: -2146232060 (0x80131904)
  • Meldung: "Timeout ist abgelaufen. Das Zeitlimit wurde vor Abschluss des Vorgangs oder der server antwortet nicht."
InformationsquelleAutor Ian Boyd | 2008-09-25
Schreibe einen Kommentar