как я могу выполнить цикл через все столбцы 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();
2 ответов
вы должны быть в состоянии сделать что-то вроде этого:
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 );
}
}
GetSchemaTable возвращает много информации о столбцах, включая их наименование, а также размер, тип и т. д.
Я полагаю, вы хотите, чтобы ключ словаря был именем столбца, а значение-значением строки. Если это так, это должно работать:
var dict = reader.GetSchemaTable().Rows.OfType<DataRow>().Select(
r => r["ColumnName"].ToString()
).ToDictionary(
cn => cn,
cn => reader[cn].ToString()
);
вы также можете использовать GetValues() чтобы получить количество столбцов и позвонить GetName (int) для каждого.