Проверьте имя столбца в объекте SqlDataReader - PullRequest
200 голосов
/ 17 декабря 2008

Как проверить, существует ли столбец в SqlDataReader объекте? На моем уровне доступа к данным я создал метод, который создает один и тот же объект для нескольких вызовов хранимых процедур. Одна из хранимых процедур имеет дополнительный столбец, который не используется другими хранимыми процедурами. Я хочу изменить метод, чтобы приспособиться к каждому сценарию.

Мое приложение написано на C #.

Ответы [ 22 ]

0 голосов
/ 12 декабря 2013

Эти ответы уже размещены здесь. Просто чуть-чуть:

bool b = reader.GetSchemaTable().Rows
                                .Cast<DataRow>()
                                .Select(x => (string)x["ColumnName"])
                                .Contains(colName, StringComparer.OrdinalIgnoreCase);
//or

bool b = Enumerable.Range(0, reader.FieldCount)
                   .Select(reader.GetName)
                   .Contains(colName, StringComparer.OrdinalIgnoreCase);

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

0 голосов
/ 17 декабря 2008

Вы также можете вызвать GetSchemaTable () в вашем DataReader, если вам нужен список столбцов и вы не хотите получать исключение ...

...