Ich habe eine generische Methode eine gespeicherte Prozedur in ASP.NET zu nennen:Anbindung an SQL endet nicht nach einem Aufruf von DB in ASP.NET
public SqlDataReader ExecuteStoredProc(string sprocName, SqlParameter[] SqlP)
{
SqlDataReader iReader;
SqlCommand sql = new SqlCommand();
sql.CommandText = sprocName;
sql.CommandType = CommandType.StoredProcedure;
sql.Connection = ConnStr;
if (SqlP != null)
{
foreach (SqlParameter p in SqlP)
{
sql.Parameters.Add(p);
}
}
sql.Connection.Open();
iReader = sql.ExecuteReader(CommandBehavior.CloseConnection);
sql.Dispose();
return iReader;
}
Auch wenn ich CommandBehavior.CloseConnection nenne die Verbindung nicht geschlossen. Ich kann die Daten in Ordnung bringen, wenn ich zum ersten Mal eine Seite anfordere. Beim Nachladen erhalte ich den folgenden Fehler:
The connection was not closed. The connection's current state is open. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The connection was not closed. The connection's current state is open.
Source Error:
Line 35: Line 36: } Line 37: sql.Connection.Open(); Line 38: iReader = sql.ExecuteReader(CommandBehavior.CloseConnection); Line 39: sql.Dispose();
Schließlich, wenn ich sql.Connection.Close() setzen; vor sql.Dispose(); Ich bekomme einen Fehler, dass iReader nicht lesbar ist, weil es bereits geschlossen wurde.
Offensichtlich schließe ich meine Verbindung falsch, kann mir jemand in die richtige Richtung zeigen?
Ich stimme Ihrem Ansatz "die Verantwortung des Verbrauchers, um Ressourcen richtig aufzuräumen." Zu, aber es ist im Allgemeinen nicht darauf zu verlassen, der Verbraucher ist zu faul, um dies zu tun. –
Danke, das hat geholfen. Ich habe eine iReader.Close() nach meiner while-Schleife zu meiner konsumierenden Methode hinzugefügt. – RedWolves
Sie müssen die Verbindung, die Sie in ExecuteStoredProc erstellen, nicht schließen und entsorgen? –