2010-06-08 15 views
8

Tengo el siguiente código y quiero recorrer todos los campos en el resultado de esta consulta y completar el campo llamado diccionario.cómo puedo recorrer todas las columnas de OracleDataReader

¿Es posible un lector de datos?

  OracleCommand command = connection.CreateCommand(); 
      string sql = "Select * from MYTABLE where ID = " + id; 
      command.CommandText = sql; 

      Dictionary<string, string> fields = new Dictionary<string, string>(); 
      OracleDataReader reader = command.ExecuteReader(); 

Respuesta

16

Usted debe ser capaz de hacer algo como esto:

Dictionary<string, string> fields = new Dictionary<string, string>(); 
OracleDataReader reader = command.ExecuteReader(); 

if(reader.HasRows) 
{ 
    for(int index = 0; index < reader.FieldCount; index ++) 
    { 
     fields[ reader.GetName(index) ] = reader.GetString(index); 
    }  
} 
4

GetSchemaTable devolverá una gran cantidad de información acerca de las columnas, incluyendo su nombre, sino también el tamaño, tipo, etc.

supongo que desea que la clave del diccionario a ser el nombre de la columna, y la valor para ser el valor de la fila. Si es así, esto debería funcionar:

var dict = reader.GetSchemaTable().Rows.OfType<DataRow>().Select(
    r => r["ColumnName"].ToString() 
).ToDictionary(
    cn => cn, 
    cn => reader[cn].ToString() 
); 

También es posible usar GetValues() para obtener el número de columnas, y llamar a GetName(int) para cada uno.

Cuestiones relacionadas