Pierwsze pytanie:
powiedz, że tak
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string storedProc = "GetData";
SqlCommand command = new SqlCommand(storedProc, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
return (byte[])command.ExecuteScalar();
}
Czy połączenie zostaje zamknięte? Ponieważ technicznie nigdy nie dotarliśmy do końca, }
tak jak return
przedtem.
Drugie pytanie:
tym razem mam:
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
int employeeID = findEmployeeID();
connection.Open();
SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
command.CommandTimeout = 5;
command.ExecuteNonQuery();
}
}
catch (Exception) { /*Handle error*/ }
Teraz powiedzmy, że gdzieś w try
pliku pojawia się błąd i zostaje on przechwycony. Czy połączenie nadal jest zamykane? Ponownie, pomijamy resztę kodu w instrukcji try
i przechodzimy bezpośrednio do catch
instrukcji.
Czy myślę zbyt liniowo, jak to using
działa? ie Czy Dispose()
po prostu zostaje wywołany, gdy opuszczamy using
zakres?