SqlDataReader-Verwendung - Frage

07/09/2009 - 15:16 von Michael Erlinger | Report spam
Hallo

ich habe eine SqlDataReader-Anweisung in Verwendung
using (reader)
{
while (reader.Read())
{
// Process SprocResults datareader here.
if (!reader.IsDBNull(0))
iPiApplParm = Convert.ToInt32(reader
["pi_appl_parameter"]);
if (!reader.IsDBNull(1))
sReturnValue = reader
["c_value"].ToString();
}
}
..und hàtte gedacht, durch das Using(reader) erspare ich mir das
reader.Close()(ich dachte, ich hàtte das irgendwo einmal gelesen).

Meine Frage nun -> Ist das so ?? oder muss ich den SqlDataReader mit
der Close()-Anweisung immer beenden, auch wenn ich eine using-
Anweisung für den Reader vewende ??

Danke einen Hinweis dazu
Gruß
Michael
 

Lesen sie die antworten

#1 Manuel Wenk
07/09/2009 - 15:25 | Warnen spam
Hallo Michael,

im Falle des Readers ist das so völlig korrekt. Das using Statement führt
dazu das beim verlassen des Blocks auf jeden Fall "Dispose()" aufgerufen wird
( IDisposable-Schnittstelle).

Der Reader macht dadurch automatisch einen Close sofern er noch nicht
geschlossen ist. Bei allen .NET Framework-Klassen die diese Schnittstelle
implementieren funktioniert das auch. Du kannst auch bei fremden Bibliotheken
davon ausgehen das durch Dispose alle Ressourcen zurückgegeben werden.

Warum fragst du danach? Weil deine Connection trotzdem offen bleibt?


Manuel Wenk
MCAD, MCTS


"Michael Erlinger" wrote:

Hallo

ich habe eine SqlDataReader-Anweisung in Verwendung
using (reader)
{
while (reader.Read())
{
// Process SprocResults datareader here.
if (!reader.IsDBNull(0))
iPiApplParm = Convert.ToInt32(reader
["pi_appl_parameter"]);
if (!reader.IsDBNull(1))
sReturnValue = reader
["c_value"].ToString();
}
}
...und hàtte gedacht, durch das Using(reader) erspare ich mir das
reader.Close()(ich dachte, ich hàtte das irgendwo einmal gelesen).

Meine Frage nun -> Ist das so ?? oder muss ich den SqlDataReader mit
der Close()-Anweisung immer beenden, auch wenn ich eine using-
Anweisung für den Reader vewende ??

Danke einen Hinweis dazu
Gruß
Michael

Ähnliche fragen