W bieżącym użytkowania, będzie zamknąć dla Ciebie:
Jeśli IDbConnection jest zamknięty przed Fill nazywa, jest otwarty do pobierania danych i następnie zamknięte. Jeśli połączenie jest otwarte, zanim zostanie wywołane wypełnienie, pozostaje otwarte.
http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx
Myślę, że to zawsze lepiej, aby wyraźnie zaspokoić sobie z using
stwierdzeniem:
using (SqlConnection conn = new SqlConnection(""))
{
conn.Open();
// Do Stuff.
} // Closes here on dispose.
Często jest to bardziej czytelne i nie polegać na ludziach rozumiejąc wewnętrzne funkcjonowanie z SqlDataAdapter.Fill
, tylko oświadczenie i połączenia using
.
Jeśli jednak użytkownik zna, to połączenie jest zamykane, zanim adapter go użyje (jak w przypadku, gdy połączenie zostało właśnie utworzone) i nie jest używane do niczego innego, kod jest całkowicie bezpieczny i ważny.
Osobiście chciałbym napisać coś takiego:
string cnStr = "Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
DataSet ds = new DataSet();
using (SqlConnection cn = new SqlConnection(cnStr))
using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn))
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
conn.Open();
adapter.Fill(ds);
}
ale jeśli piszę ten kod bez korzystania budowę cn cokolwiek się stanie zamkniętym przed wyjściem z funkcji – Wachburn
@Wachburn rzeczywiście i konsultacji MSDN sprawdza to. Przepraszam, nie złapałem tego za pierwszym razem. –
Zajmuje się zamykaniem dla ciebie, jeśli polecenie zostanie wykonane pomyślnie, ale co z wyjątkiem w przypadku wyjątku? (zakleszczenie, przekroczenie limitu czasu, itp.) –