2010-04-06 25 views
1

Je viens de commencer à utiliser le bloc d'accès aux données de Microsoft. Il y a très peu d'instructions sur la façon correcte d'utiliser la bibliothèque. Je voulais juste savoir si c'est la bonne façon d'utiliser le lecteur de données.C#: Est-ce la façon correcte d'utiliser le SqlDataReader pour DAAB

SqlDataReader reader = SqlHelper.ExecuteReader(config.ConnectionString, CommandType.Text, "select * from category"); 
List<string> a = new List<string>(); 
using (reader) 
{ 
    while (reader.Read()) 
    { 
      string t = reader.GetString(1); 
      a.Add(t); 
    } 

    return a; 
} 

Est-ce que tout sera fermé de cette façon? Y a-t-il un risque de fuite de mémoire?

+0

La dernière version (v6) sur CodePlex a maintenant une documentation très bien écrite, des explications et un exemple de code. Voir http://entlib.codeplex.com/releases et en particulier le "Guide du développeur de Microsoft Enterprise Library" qui peut être téléchargé en pdf et explique très bien l'utilisation et la logique du DAAB. – mdisibio

Répondre

2

Mettez votre initialisation du lecteur dans le bloc using, et je voudrais éviter d'utiliser des numéros de colonne si vous le pouvez, car ils tournent essentiellement en nombres magiques. Malheureusement, cela nécessite simplement que vous utilisiez les noms de colonne, mais j'ai trouvé que les noms de colonnes sont moins susceptibles de changer que les offsets de colonnes, et vous pouvez toujours mettre vos noms de colonnes dans un fichier de configuration ou quelque chose. Aussi, assurez-vous de prendre en compte la possibilité de colonnes nulles

using(var reader = SqlHelper.ExecuteReader(etc. etc. etc.)) 
{ 
    while(reader.read()){ 
    { 
     //Only need to do this if you don't want your string to be null 
     //and if the "columnName" column is nullable. 
     var stringValue = reader.IsDBNull(reader.GetOrdinal("columnName") 
         ? "" 
         : reader.GetString(reader.GetOrdinal("columnName")); 
     a.Add(stringValue); 
    } 
}