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

haciendo esto me dan ganas de llorar, pero parece que no puedo encontrar la manera de utilizar el tipo de métodos de recuperación de especficos por nombre de columna que no sea de esta manera. por favor dime que hay una mejor manera. esto es especificamente para DB2, pero me gustaría que la solución a trabajar para MS SQL también si es posibleDataReader.GetString() a través del nombre de columna

Respuesta

15

Usted está buscando el método GetOrdinal:

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

general DEPOSITO los ordinales en un tipo anónimo para un rendimiento y legibilidad:

// ... 
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

bien, ahora me siento estúpido –

+1

¡Esa es una idea REALMENTE aseada! –

+0

buen trabajo, tnx – DaniKR

Cuestiones relacionadas