Die folgende Methode in einer statischen Klasse gibt mir eine Timeout-Ausnahme, da der Verbindungspool maximiert ist.Verbindungsverlust in C# DataBase.ExecuteScalar
Während ich im Debug-Modus sah ich in sql Management Studio und sah, gab es 150 Schlaf-Prozesse.
Ich erwartete, dass die Verbindungen automatisch geschlossen werden ... Ich habe auch versucht, als ein statisches Mitglied setzen und immer noch den gleichen Fehler.
Irgendwelche Ideen? here der Code.
public static Decimal ExecuteScalarDec(string procName, params object[] parameters)
{
try
{
return (Decimal)DatabaseFactory.CreateDatabase().ExecuteScalar(procName, parameters);
}
catch (Exception ex)
{
throw new Exception(procName.ToString() + " " + parameters.ToString(), ex);
}
}
„Mit dem Design, handhaben die meisten der Datenbank Klassenmethoden das Öffnen und Schließen von Verbindungen bei jedem Aufruf an die Datenbank daher der Anwendungscode muss nicht enthalten Code zum Verwalten von Verbindungen. ". ExecuteReader ist eine Ausnahme (weil es eine Ressource zurückgibt). ExecuteScalar befindet sich in der Schwebe: Es gibt einen "Skalar" zurück. Ich denke jedoch, dass der Skalar ziemlich schwer sein kann, z. Ein Stream, der aus einer großen Datentyp-Rückgabe erstellt wurde und die die Verbindung offen lassen müsste. - Remus Rusanu
ich nicht auf deine Antwort kommentieren konnte, weil er sagt, „kommentiert erfordert 50 Ruf“ Nachdem ich meine Benutzer registriert ...
Ich bin eine Spalte Id in ExecuteScalar Rückkehr() und der Wert wird zurückgegeben - ich weiß dies, weil der nächste Aufruf zum Ausführen von Skalar nur aufgerufen wird, nachdem ich einen Wert erhalten ... Es ergibt keinen Sinn, dass der Stream für immer offen bleiben wird Und ich sah in SQL Management das Alle Prozesse schlafen.
verfolgen Was macht die ExecuteScalar() -Methode mit dem zugrunde liegenden DbConnection-Objekt - ruft sie Dispose() oder Close() auf, z eine "using" Aussage? –