W Visual Basic do interakcji z bazami danych zazwyczaj używana jest biblioteka ADO.NET. Kluczowe klasy do ustanawiania połączenia i dostępu do danych:
Prawidłowe połączenie i zamykanie połączenia:
Imports System.Data.SqlClient Using connection As New SqlConnection("connection_string_here") connection.Open() Using command As New SqlCommand("SELECT * FROM Users", connection) Using reader As SqlDataReader = command.ExecuteReader() While reader.Read() Console.WriteLine(reader("Username")) End While End Using ' Zamyka reader End Using End Using ' Automatycznie zamyka connection
Praktyka używania bloku Using gwarantuje automatyczne zamknięcie połączenia, nawet jeśli wystąpią błędy. Jest to krytyczne dla zapobieżenia wyciekom połączeń.
Jaka jest różnica między Dispose() a Close() dla SqlConnection i czy należy wywoływać oba metody?
Odpowiedź:
Metoda Close() zamyka połączenie z bazą, a Dispose() zwalnia wszystkie zasoby związane z obiektem połączenia. Wywołanie Dispose() obejmuje wywołanie Close(). Zatem, jeśli używany jest Using, Dispose() jest wywoływane automatycznie, a oddzielne wywołanie Close() nie jest konieczne.
connection.Close() ' Zamyka połączenie, ale obiekt wciąż istnieje connection.Dispose() ' Zwalnia wszystkie zasoby (z zaleceniem używania poprzez Using)
Historia
W projekcie występowały duże opóźnienia i błędy przy łączeniu z bazą: połączenia otwierano ręcznie, ale zapomniano je zamknąć, co prowadziło do wyczerpania puli połączeń. Rozwiązanie: wprowadzenie bloku Using.
Historia
Programista błędnie wywoływał tylko Close(), a obiekt SqlConnection pozostawał "wiszący" w pamięci. W dłuższej perspektywie prowadziło to do wycieków zasobów i nieprzewidywalnego zachowania aplikacji.
Historia
Zamiast pracy z SqlConnection używano OleDbConnection do pracy z SQL Server z powodu nieświadomości, że jest to mniej efektywne i może prowadzić do problemów z wydajnością i kompatybilnością. Po zmianie na SqlConnection wydajność wzrosła o 30%.