2010-06-08 134 views
8

我有下面的代码,我想遍历这个查询结果中的所有字段并填充名为字段的字典。我如何循环遍历OracleDataReader的所有列

鉴于一个datareader是可能的吗?

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

回答

16

你应该能够做这样的事情:

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会返回大量的信息有关的栏目,包括姓名,而且大小,类型等

你想要的字典的关键是列名我相信,和值作为行值。如果是的话,这应该工作:

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

你也可以使用GetValues()获得的列数,并呼吁GetName(int)每个。