Weiß jemand, ob die SqlDataAdapter.Dispose-Methode tatsächlich SqlConnections schließt oder disponiert? Ich habe Reflektor geladen und ich sehe, dass SqlDataAdapter von DbDataAdapter erbt. Wenn ich die displace-Methode in dieser Klasse disassembliere, scheint es keine SqlConnections zu geben. Ich nehme an, ich könnte einen Test dafür schreiben, aber ich dachte mir, ich würde fragen, ob irgendjemand etwas dazu wissen könnte.Funktioniert SqlDataAdapter.Dispose tatsächlich eine zugeordnete SqlConnection?
Antwort
Das Erste, was zu beachten ist, ist, dass der DataAdapter Ihre Verbindung unter bestimmten Umständen verwaltet und schließt. Wenn Sie beispielsweise einen DataAdapter verwenden, arbeiten Sie wahrscheinlich mit den Funktionen .Fill() und .Update() in DataTables/DataSets.
Vom .Fill() docs:
Das Verbindungsobjekt mit der SELECT-Anweisung zugeordnet sind, müssen gültig sein, aber es muss nicht geöffnet sein. Wenn die Verbindung geschlossen wird, bevor Fill aufgerufen wird, wird sie geöffnet, um Daten abzurufen, und anschließend geschlossen. Wenn die Verbindung geöffnet ist, bevor Fill aufgerufen wird, bleibt sie geöffnet.
Die .Update() docs nichts über die Verbindung überhaupt erwähnen, so würde ich erwarten, dass es manuell verwalten muss.
Jetzt haben Sie speziell nach der Dispose() -Methode gefragt. Wie Update, die Dispose() docs erwähnen nicht speziell die Verbindung, so würde ich erwarten, es manuell zu schließen.
Using conn as New SqlConnection(""), _
adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff
End Using
Oder in C#:
Schließlich können wir auf Bob King Code etwas wie diese verbessern
using (SqlConnection conn = new SqlConnection(""))
using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn})
{
// Do stuff
}
nicht zu 100% erhielt ich die initialize Syntax für den Adapter richtig, aber ich tippte es direkt in das Antwortfenster. Ich werde es später bei Bedarf reparieren.
Nein, es verfügt nicht über die Verbindung. Ich glaube es sollte nicht. Vielleicht möchten Sie es woanders verwenden.
Soweit ich weiß es nicht. Ich benutze verschachtelte Anweisungen verwenden, dies zu erreichen, stellt die Verbindung zuerst, dann den Adapter erstellen und wie die Verwendung von Aussagen „Pop“, der Adapter angeordnet ist, dann wird die Verbindung angeordnet ist, die tut Auslöser ein wachsamen:
Using conn as New SqlConnection("")
Using adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff'
End Using
End Using
Die Syntax ist praktisch identisch für C#, wenn dies Ihre Sprache der Wahl ist.
- 1. Ist SqlCommand.Dispose() erforderlich, wenn die zugeordnete SqlConnection entfernt wird?
- 2. Funktioniert das OptionalFieldAttribute tatsächlich?
- 3. Wie funktioniert volatile tatsächlich?
- 4. Funktioniert PHP filter_var FILTER_VALIDATE_EMAIL tatsächlich?
- 5. Wie funktioniert Integer.parseInt (String) tatsächlich?
- 6. Wie Git Klon tatsächlich funktioniert
- 7. Firebird SqlConnection
- 8. Wie funktioniert C Präprozessor tatsächlich?
- 9. Get SqlConnection von DbConnection
- 10. Kann der DbProviderFactory.CreateCommandBuilder tatsächlich eine Null zurückgeben?
- 11. SqlConnection Namespace nicht gefunden
- 12. Listbox nicht zugeordnete Variable
- 13. Wie funktioniert Linux-blockierende E/A tatsächlich?
- 14. Wie kommt `if (Test-Path ...)` tatsächlich funktioniert?
- 15. Wie funktioniert Lw in Mips tatsächlich?
- 16. Suchmaschinen-Lösung für Django, die tatsächlich funktioniert?
- 17. Python HTML-Parsing, das tatsächlich funktioniert
- 18. Laravel Ausgabe zugeordnete Tags
- 19. Wie funktioniert ein Werttyp tatsächlich in .net?
- 20. Gibt es eine .NET-Standardmethode zum Testen, ob eine SqlConnection-Zeichenfolge funktioniert?
- 21. verschiedene Datentypen zugeordnete Datenschräglauf
- 22. Nicht zugeordnete Eigenschaften - Sequelize
- 23. AssertionError: Nicht zugeordnete Partition
- 24. SqlConnection geben Objektverweis Fehler
- 25. Verarbeitet SqlConnection Abfragen parallel?
- 26. C# SQLConnection Pooling
- 27. Passwort Probleme mit SqlConnection
- 28. sqlconnection ist nicht definiert
- 29. SqlConnection Thread-Safe?
- 30. Fehlende Baugruppenreferenz für SqlConnection
Hmm, Joel, ich habe nie neue IDisposables in derselben Using-Anweisung deklariert. Das ist ziemlich glatt! –
Außerdem denke ich, dass die C# -Version von Object Initialisers kein führendes "." http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx –