Używam instrukcji using dla SqlConnection
. Jest to dobre dla wydajności, ponieważ siły wywołujące Dispose() po prostu zwalniają połączenie z pulą wcześniej.Czy instrukcję using można zastąpić nawiasami klamrowymi?
Jednak zdałem sobie sprawę, że obiekt utworzony przy użyciu nie może być ponownie zdefiniowany. Nie mogę tego zrobić tak:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
Zastanawiałem się, czy mogę zastąpić używania i zrobić coś takiego:
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
//...
connection = new SqlConnection(connectionString2);
//...
connection = new SqlConnection(connectionString3);
}
SqlConnection
nie będzie dostepne po ostatnim }
klamrą. Czy funkcja Dispose() zostanie wywołana natychmiast po wykryciu obiektu poza zakresem?
Dzięki. Jeśli chodzi o zamykanie połączeń, oczywiście zadzwoniłbym connection.Close(), ale nie zapisałem go w powyższym kodzie. – nan
Nawet jeśli wywołasz Close() jawnie, twój drugi przykład nadal może pozostawić otwarte połączenie, jeśli wystąpi wyjątek. Nie tylko za pomocą wywołania Usuwaj, gdy wykonywanie opuszcza ten blok, ale także wywołuje go, gdy wystąpi wyjątek. – ThatBlairGuy