Tut SqlDataAdapter schließen der SqlConnection-nach der Fill () - Funktion?
Tut SqlDataAdapter
schließen Sie die SqlConnection
nach der Fill()
Funktion oder muss ich es dann selbst schließen?
string cnStr = @"Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
cn = new SqlConnection(cnStr);
SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
cn.Close() //????????
Console.WriteLine(ds.Tables[0].Rows.Count);
Console.WriteLine(cn.State);
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer aktuellen Nutzung, wird es eng für Sie:
http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx
Ich denke, es ist immer besser, sich explizit eingehen, es sich mit einem
using
Aussage:Dies ist oft besser lesbar und nicht sich verlassen auf Menschen Verständnis der inneren Abläufe des
SqlDataAdapter.Fill
nur dieusing
Anweisung und verbindungen.Jedoch, wenn Sie wissen wird die Verbindung geschlossen wird, bevor der adapter verwendet werden (wie in, Sie haben gerade die Verbindung erstellt) und es ist nicht für irgendetwas anderes, dein code ist vollkommen sicher und gültig.
Persönlich, ich würde etwas schreiben wie dieses:
using
- Anweisung ruft dispose auf Ausnahme, wie gut es einfach kompiliert in einen try-finally-block unter der Haube.using
block. Sie begann, indem Sie sagen:In your current usage, it will close for you
aber ich wollte klären, ob das wäre der Fall, wenn eine Ausnahme geworfen wird.conn.Open();
ist eigentlich nicht nötig. Es ist einfach da, im Falle andere Programmierer wissen nicht, dassadapter.Fill(ds);
öffnen (und schließen) der Verbindung selbst. Ist das richtig?using (IDisposable conn = new SqlConnection(), comm = new SqlCommand())
Sie nichtusing (SqlConnection conn = new SqlConnection(), SqlCommand comm = new SqlCommand())
so dreiusing
Aussagen sind in diesem Fall verpflichtet.Als ich wissen, Sie brauchen, um die Verbindung zu schließen, indem Sie eigene
Beste Weg das zu tun ist
dies wird schließen Sie die Verbindung automatisch
using-block in C# kommt sehr handlich, während Sie sich mit Einweg-Objekte. Einweg-Objekte sind jene Objekte, die explizit die Ressourcen freizugeben, die Sie verwenden, wenn Sie aufgerufen zu entsorgen. Wie wir wissen .Net garbage collection ist nicht-deterministisch, so kann man nicht Vorhersagen, Wann genau wird das Objekt von der garbage Collection freigegeben.
Lesen Sie diesen Beitrag für weitere details : Verständnis 'mit' block in C#