Как я могу перебрать все столбцы OracleDataReader - PullRequest
9 голосов
/ 08 июня 2010

У меня есть следующий код, и я хочу перебрать все поля в результате этого запроса и заполнить словарь с именем field.

При условии, что это возможно с помощью устройства чтения данных?

            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 ]

17 голосов
/ 08 июня 2010

Вы должны быть в состоянии сделать что-то вроде этого:

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 голосов
/ 08 июня 2010

GetSchemaTable вернет много информации о столбцах, включая их имя, а также размер, тип и т. Д.

Я предполагаю, что вы хотите, чтобы ключом словаря было имя столбца, а значением было значение строки. Если так, это должно работать:

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

Вы также можете использовать GetValues ​​() , чтобы получить количество столбцов, и вызвать GetName (int) для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...