Как получить порядковый номер столбца в DataReader - PullRequest
3 голосов
/ 23 ноября 2011

Как я могу узнать, существует ли столбец в наборе результатов DataReader?

я стараюсь:

int columnOrdinal = reader.GetOrdinal("LastName");
columnExists = (columnOrdinal < 0);

но GetOrdinal выдает исключение, если столбец не существует. Мой случай не исключительный. Это наоборот. Это ... ceptional.


Примечание: Не связано с моим вопросом, но реальная причина, по которой я хочу узнать, существует ли столбец, заключается в том, что я хочу получить порядковый номер столбца без исключения, если столбец не существует:

int columnOrdinal = reader.GetOrdinal("Lastname");

Примечание: Не относится к моему вопросу, но real причина, по которой я хочу узнать, существует ли столбец, потому что я хочу знать, существует ли столбец содержит ноль:

itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));

К сожалению, IsDBNull принимает только порядковый номер, а GetOrdinal создает исключение. Так что мне осталось:

if (ColumnExists(reader, "Lastname"))
{
   itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));
}
else
   itIsNull = false;

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

1 Ответ

3 голосов
/ 23 ноября 2011

Существует ограничение на то, что вы можете сделать, поскольку IDataReader не предоставляет много полезного.Используя цикл, как показано в ответе на аналогичный вопрос

Проверьте имя столбца в объекте SqlDataReader

Вы можете, с первой обработанной строкой, построитьпростой словарь, который вводится по имени столбца с порядковыми номерами в качестве значений (или HashSet, если вам не нужны порядковые значения).Тогда вы можете просто использовать columnDictionary.ContainsKey ("LastName") в качестве теста.Вы должны построить словарь только один раз, для первой встреченной строки, тогда все последующие строки будут быстрыми.

Но, честно говоря, по сравнению с временем базы данных время, затрачиваемое на использование решения as-is в этом другом процессе стекового потока, вероятно, будет незначительным.

Редактировать: дополнительные возможности здесь: Проверка наличия столбца в считывателе данных

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