Nein, die Entsorgung der SqlCommand
wird die Verbindung nicht beeinflussen. Ein besserer Ansatz wäre es, auch als auch die SqlConnection
in einem mit Block zu wickeln:
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
{
cmd.ExecuteNonQuery();
}
}
Andernfalls wird die Verbindung ist unverändert durch die Tatsache, dass ein Befehl, der benutzt es wurde angeordnet (vielleicht ist das, was Sie wollen?). Aber bedenken Sie, dass auch eine Verbindung entsorgt werden sollte, und wahrscheinlich wichtiger als ein Befehl zu entsorgen.
EDIT:
I dieses gerade getestet:
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
conn.Dispose();
Der erste Befehl angeordnet wurde, wenn die Verwendung von Block verlassen wurde. Die Verbindung war noch offen und gut für den zweiten Befehl.
Also entsorgt der Befehl definitiv nicht die Verbindung, die er benutzte.
Nachdem der SqlCommand-com freigegeben wurde, wird seine Connection-Instanz nicht mehr gestartet (wird von nichts verwendet). Sobald die GarbageCollector die SqlConnection-Instanz abgeschlossen hat, wird die Verbindung nicht getrennt? Ich denke es wird sein, denn Verbindung wird hier nur mit cmd referenziert. – mecek
Nun, in diesem Fall, @Mecek, wird der Speicher härter befreit, da er durch die Finalisierung geht, die ihn von gen0 zu gen1 befördert, denke ich. –