Czy ktoś wie, czy metoda SqlDataAdapter.Dispose faktycznie zamyka lub unieszkodliwia SqlConnections? Załadowałem Reflector i widzę, że SqlDataAdapter dziedziczy po DbDataAdapter. Jeśli zdemontuję i spojrzę na metodę utylizacji w tej klasie, wydaje się, że nie ma możliwości zbycia żadnych SqlConnections. Przypuszczam, że mógłbym napisać test na to, ale pomyślałem, że zapytam, czy ktoś ma wgląd w to.Czy SqlDataAdapter.Dispose faktycznie Zamknij skojarzony SqlConnection?
Odpowiedz
Pierwszą rzeczą, o której należy pamiętać, jest to, że DataAdapter zarządza i blokuje połączenie w pewnych okolicznościach. Na przykład, jeśli używasz DataAdapter prawdopodobnie pracujesz na DataTables/DataSets przy użyciu funkcji .Fill() i .Update().
Z .Fill() docs:
Celem połączenia związane z SELECT musi być ważny, ale nie muszą być otwarte. Jeśli połączenie zostanie zamknięte przed wywołaniem wypełnienia, zostanie otwarte w celu pobrania danych, a następnie zamknięte. Jeśli połączenie jest otwarte, zanim zostanie wywołane wypełnienie, pozostaje otwarte.
W ogóle nie wspomina się o połączeniu, więc należałoby zarządzać nim ręcznie.
Teraz zapytałeś konkretnie o metodę Dispose(). Podobnie jak w przypadku aktualizacji, Dispose() docs nie wspomina o połączeniu, więc należałoby zamknąć to ręcznie.
Wreszcie możemy poprawić kod Boba Kinga lekko tak:
Using conn as New SqlConnection(""), _
adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff
End Using
Albo w C#:
using (SqlConnection conn = new SqlConnection(""))
using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn})
{
// Do stuff
}
Nie 100% mam składnię zainicjować właściwą kartę, ale wpisz go bezpośrednio w oknie odpowiedzi. W razie potrzeby naprawię to później.
Nie, nie pozbawia połączenia. Uważam, że nie powinno. Możesz użyć go gdzie indziej.
O ile mi wiadomo, nie ma. Używam zagnieżdżone Korzystanie sprawozdań do osiągnięcia tego celu, tworzyć połączenia, następnie utworzyć kartę i jak przy użyciu instrukcji „pop”, adapter jest umieszczony, wtedy połączenie jest umieszczony, co robi wywołać zamknij
Using conn as New SqlConnection("")
Using adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff'
End Using
End Using
Składnia jest praktycznie identyczna dla języka C#, jeśli jest to Twój wybrany język.
- 1. Czy SqlCommand.Dispose() jest wymagana, jeśli skojarzony SqlConnection zostanie usunięty?
- 2. Czy SqlDataAdapter zamyka funkcję SqlConnection after Fill()?
- 3. Shared SqlConnection
- 4. Czy musimy sprawdzić, czy faktycznie przydzielono obiekty?
- 5. SqlConnection vs Sql Session. Czy ich życie jest zbieżne?
- 6. Zmiana limitu czasu SqlConnection
- 7. sqlconnection nie jest zdefiniowany
- 8. Czy kontrakty C# 4.0 faktycznie robią cokolwiek?
- 9. Czy powiązanie odniesienia faktycznie ocenia operand?
- 10. Czy ktoś faktycznie używa przestrzeni nazw css?
- 11. SqlConnection z programowania równoległego
- 12. Uzyskaj SqlConnection od DbConnection
- 13. Close.js zamknij odpowiedź
- 14. Połączenie Jdbc zamknij i przygotuj zamknij
- 15. "zamknij" strumień?
- 16. niejawny deklarację funkcji „Zamknij”
- 17. Zamknięcie SqlConnection i SqlCommand C#
- 18. SqlConnection utknął na nazwanych potokach
- 19. ASP.NET stosowanie SqlConnection połączyć MySQL
- 20. Profil Mini zintegrowany z SqlConnection
- 21. Czy istnieje istniejący SqlConnection, którego mogę używać w LinqPadzie?
- 22. Czy istnieją bardziej bezpieczne alternatywy dla klasy .Net SQLConnection?
- 23. Jak mogę "odłączyć" SqlDataReader od jego obiektu SqlConnection?
- 24. Zamknij wydarzenie dla chrome.app.window
- 25. PHP: zamknij strumień wyjściowy
- 26. Przycisk HTML Zamknij okno
- 27. Zamknij Java 8 Stream
- 28. wxNotebook Zamknij przycisk?
- 29. Czy używanie smallinta w int w mysql faktycznie oszczędza pamięć?
- 30. Jak mogę sprawdzić, czy faktycznie zaznaczono pole wyboru?
Hmm, Joel, nigdy więcej nie mogłem zadeklarować wielu IDisposables w tej samej instrukcji Using. To całkiem sprytne! –
Ponadto, myślę, że wersja C# Inicjatorów Obiektów nie używa wiodącego "." http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx –