Sollten wir gemäß meiner anderen Frage zu Einwegobjekten Close () vor dem Ende eines using-Blocks aufrufen?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
c#
asp.net
using
sqlconnection
sqlcommand
John Bubriski
quelle
quelle
Demontage von SqlConnection mit .NET Reflector :
Es ruft Close () innerhalb von Dispose () auf
quelle
Das Schlüsselwort using schließt die Verbindung korrekt, sodass kein zusätzlicher Aufruf zum Schließen erforderlich ist.
Aus dem MSDN-Artikel zum SQL Server-Verbindungspooling :
Die tatsächliche Implementierung von SqlConnection.Dispose mit .NET Reflector ist wie folgt:
quelle
Mit Reflector können Sie sehen, dass die
Dispose
Methode vonSqlConnection
tatsächlich aufruftClose()
.quelle
Nein, wenn Sie Dispose () in SqlConnection aufrufen, wird auch Close () aufgerufen.
MSDN - SqlConnection.Dispose ()
quelle
Nein, der Using-Block ruft
Dispose()
sowieso für Sie auf, sodass Sie nicht anrufen müssenClose()
.quelle
Dispose()
AnrufeClose()
, nicht umgekehrt?Nein, es ist nicht erforderlich, eine Verbindung zu schließen, bevor Sie Dispose aufrufen.
Einige Objekte (wie SQLConnections) können nach dem Aufruf von Close wiederverwendet werden, jedoch nicht nach dem Aufruf von Dispose. Für andere Objekte entspricht der Aufruf von Close dem Aufruf von Dispose. (ManualResetEvent und Streams verhalten sich meiner Meinung nach so)
quelle
Nein, die SqlConnection-Klasse erbt von IDisposable. Wenn das Ende der Verwendung (für das Verbindungsobjekt) erreicht ist, ruft sie automatisch Dispose für die SqlConnection-Klasse auf.
quelle