2010-07-12 6 views
6
 
Dictionary Fields = new Dictionary(); 
for (int i = 0; i < reader.FieldCount; i++) 
{ 
    Fields.Add(reader.GetName(i), i); 
} 

this._MyField1 = reader.GetString(Fields["field1"]); 
this._Myfield2 = reader.GetInt16(Fields["field2"]); 

Cela me donne envie de pleurer mais je n'arrive pas à comprendre comment utiliser les méthodes de recherche de type specf par un autre nom de colonne. S'il vous plaît dites-moi il y a un meilleur moyen. c'est specificly pour DB2, mais je voudrais que la solution fonctionne pour MS Sql également si possibleDataReader.GetString() via le nom de colonne

Répondre

15

Vous êtes à la recherche de la méthode GetOrdinal:

this._MyField1 = reader.GetString(dr.GetOrdinal("field1")); 
this._Myfield2 = reader.GetInt16(dr.GetOrdinal("field2")); 

je en cache généralement les ordinaux dans un type anonyme pour la performance et la lisibilité:

// ... 
using (IDataReader dr = cmd.ExecuteReader()) 
{ 
    var ordinals = new { 
          Foo = dr.GetOrdinal("Foo"), 
          Bar = dr.GetOrdinal("Bar") 
         }; 

    while (dr.Read()) 
    { 
     DoSomething(dr.GetString(ordinals.Foo), dr.GetInt16(ordinals.Bar)); 
    } 
} 
// ... 
+0

ok, maintenant je me sens stupide –

+1

C'est une idée vraiment géniale! –

+0

super travail, tnx – DaniKR

Questions connexes