web-dev-qa-db-fra.com

C # - Try-Catch-Enfin au retour

J'ai le code suivant:

public DataTable GetAllActiveUsers()
{
            DataTable dataTable = new DataTable();

            try
            {
                connection.Open();

                SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection);

                SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand);
                dataAdapter.Fill(dataTable);

                return dataTable;
            }
            catch(Exception e)
            {
                Console.WriteLine(e);

                return null;
            }
            finally
            {
                connection.Close();
            }
        }

Quels sont les utilisateurs actifs que j'ai sur ma base de données? Mais quelqu'un peut-il m'expliquer si le bloc Finally sera exécuté s'il exécute correctement le bloc try et renvoie le DataTable ??

Merci

18
Danny

Oui.

Comme indiqué ici: MSDN

En règle générale, les instructions d'un bloc finalement s'exécutent lorsque le contrôle quitte une instruction try. Le transfert de contrôle peut se produire à la suite de l'exécution normale, de l'exécution d'une instruction break, continue, goto ou return, ou de la propagation d'une exception hors de l'instruction try.

Mais finalement le bloc n'est pas toujours exécuté. Vous pouvez lire l'anecdote d'Alex Papadimoulis ici

15
gyosifov

Oui.
Le bloc finally sera exécuté s'il y a une instruction return ou une exception levée dans le bloc try {} catch().

2
croxy

enfin le bloc est toujours exécuté.

vous devez vous débarrasser du bloc enfin. Car, dispose également ferme la connexion et supprime les ressources mémoire non gérées.

finally
{
    connection.Dispose();
}
2
mehmet mecek