Visual Basic'te veri tabanlarıyla etkileşim için genellikle ADO.NET kütüphanesi kullanılır. Bağlantı ve veri erişimi için temel sınıflar:
Doğru bağlantı ve bağlantının kapatılması:
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 ' Reader'ı kapatır End Using End Using ' Bağlantıyı otomatik olarak kapatır
Using bloğunu kullanma pratiği, hatalar olsa bile bağlantının otomatik olarak kapanmasını garanti eder. Bu, bağlantı sızıntılarını önlemek için kritik öneme sahiptir.
SqlConnection için Dispose() ile Close() arasındaki fark nedir ve her iki yöntemi de çağırmak gerekli mi?
Cevap:
Close() yöntemi veritabanı bağlantısını kapatırken, Dispose() bağlantı nesnesi ile ilişkili tüm kaynakları serbest bırakır. Dispose() çağrısı, Close() çağrısını da içerir. Dolayısıyla, Using kullanıldığında, Dispose() otomatik olarak çağrılır ve ayrı bir Close() çağrısı gerekli değildir.
connection.Close() ' Bağlantıyı kapatır, ancak nesne hala mevcuttur connection.Dispose() ' Tüm kaynakları serbest bırakır (Using ile çağrılması önerilir)
Hikâye
Projede veri tabanına bağlantıda büyük gecikmeler ve hatalar yaşanıyordu: bağlantılar manuel olarak açılıyordu, ancak kapatılmayı unutuluyordu, bu da bağlantı havuzunun tükenmesine neden oluyordu. Çözüm: Using bloğunun getirilmesi.
Hikâye
Geliştirici yalnızca Close() çağrısını yanlış bir şekilde yapıyordu, SqlConnection nesnesi hafızada "asılı" kalıyordu. Uzun vadede bu, kaynak sızıntılarına ve uygulamanın öngörülemeyen davranışlarına yol açıyordu.
Hikâye
SQL Server ile çalışmak için SqlConnection yerine OleDbConnection kullanılıyordu, çünkü bunun daha az verimli olduğunu ve performans ve uyumluluk sorunlarına yol açabileceği bilinmiyordu. SqlConnection'a geçtikten sonra performans %30 arttı.