2010-09-08 2 views
3

Dans l'exemple de code ci-dessous, ma connexion de contexte de données restera-t-elle ouverte une fois la méthode ListOfLists terminée? Ai-je besoin de le fermer explicitement, ou restera-t-il ouvert et disponible pour d'autres méthodes?Ma connexion SQL restera-t-elle ouverte une fois mon dictionnaire rempli

public static Dictionary<int, string > ListOfLists() 
     { 
      try 
      { 
       ListDataDataContext db = new ListDataDataContext(GetConnectionString("Master")); 

       return db.ListMatchingHeaders 
        .Select(r => new { r.ListRecNum, r.ListName }) 
        .ToDictionary(t => t.ListRecNum, t => t.ListName); 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("Could not connect to database, please check connection and try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       return null; 
      } 
     } 
+0

D'abord, vous avalez l'exception qui rendra le débogage plus difficile plus tard. Deuxièmement, vous n'avez aucune exception à faire avec, par exemple. 'catch (Exception e)'. Troisièmement, à moins que vous n'ayez à traiter la cause de l'exception et que vous ne la corrigiez, ou que vous n'essayiez de le faire à nouveau, vous devriez lancer l'exception, afin qu'elle soit traitée plus haut dans la pile des appels. –

Répondre

2

Il est toujours ouvert. Vous devrez disposer/fermer explicitement la connexion ou il est possible que vous ayez des problèmes de mémoire ou de pool de connexions. Je vous recommande d'entourer votre contexte autour d'un bloc using. Attraper l'objet Exception comme cela est une mauvaise pratique.

public static Dictionary<int, string> ListOfLists() 
{ 
    try 
    { 
     using (ListDataDataContext db = new ListDataDataContext(GetConnectionString("Master"))) 
     { 
      return db.ListMatchingHeaders 
       .Select(r => new { r.ListRecNum, r.ListName }) 
       .ToDictionary(t => t.ListRecNum, t => t.ListName); 
     } 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("Could not connect to database, please check connection and try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     return null; 
    } 
} 
Questions connexes