2010-07-12 15 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"]); 

fare ciò mi fa venir voglia di piangere ma non riesco a capire come utilizzare i metodi di recupero di tipo specfic per nome di colonna diverso da questo modo. per favore dimmi che c'è un modo migliore. questo è specificly per DB2, ma vorrei che la soluzione a lavorare per MS SQL anche, se possibile,DataReader.GetString() tramite nome colonna

risposta

15

Stai cercando il metodo di GetOrdinal:

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

Io in genere memorizzare nella cache gli ordinali in un tipo anonimo per le prestazioni e leggibilità:

// ... 
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, ora mi sento stupido –

+1

Questa è un'idea VERAMENTE pulita! –

+0

ottimo lavoro, tnx – DaniKR

Problemi correlati