我如何遍历OracleDataReader的所有列

时间:2010-06-08 03:00:35

标签: c# sql 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();

2 个答案:

答案 0 :(得分:17)

你应该可以这样做:

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

答案 1 :(得分:4)

GetSchemaTable将返回有关列的大量信息,包括其名称以及大小,类型等。

我认为你希望字典的键是列名,而值是行值。如果是这样,这应该有效:

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

您还可以使用GetValues()获取列数,并为每个列调用GetName(int)