2010-06-08 11 views
8

J'ai le code suivant et je veux parcourir tous les champs dans le résultat de cette requête et remplir le champ appelé dictionnaire.Comment puis-je faire une boucle dans toutes les colonnes de l'OracleDataReader

Étant donné un lecteur de données, est-ce possible?

  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(); 

Répondre

16

Vous devriez être en mesure de faire quelque chose comme ceci:

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 retournera beaucoup d'informations sur les colonnes, y compris leur nom, mais aussi la taille, le type, etc.

Je suppose que vous voulez que la clé du dictionnaire pour le nom de la colonne et la valeur à être la valeur de ligne. Si oui, cela devrait fonctionner:

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

Vous pouvez également utiliser GetValues() pour obtenir le nombre de colonnes et appeler GetName(int) pour chacun.