В этой ситуации можно поспорить обе стороны.Как уже указывалось другими, использование имени более читабельно и не сломается, если кто-то изменит порядок столбцов в базовой базе данных.Но можно также утверждать, что использование ординала имеет то преимущество, что он не ломается, если кто-то изменяет имя столбца в базовой базе данных.Однако я предпочитаю первый аргумент и думаю, что аргумент читабельности для имен столбцов превосходит второй аргумент в целом.И дополнительным аргументом для имен является то, что он может «самостоятельно обнаруживать» ошибки.Если кто-то действительно поменяет имя поля, то у кода больше шансов взлома, чем при обнаружении незаметной ошибки при работе, когда он читает неправильное поле.
Это кажется очевидным, но, возможно, стоит упомянутьсценарий использования, который имеет как ошибку самообнаружения, так и производительность ординалов.Если вы явно укажете список SELECT в SQL, то использование ординалов не будет проблемой, поскольку оператор в коде гарантирует порядок:
SELECT name, address, phone from mytable
В этом случае его будет достаточно безопасно использоватьпорядковые номера для доступа к данным.Неважно, если кто-то перемещает поля в таблице.И если кто-то меняет имя, то оператор SQL выдает ошибку при запуске.
И последний момент.Я только что провёл тест на провайдере, которому помог написать.Тест прочитал миллион строк и получил доступ к полю «фамилия» в каждой записи (по сравнению со значением).Использование rdr[“lastname”]
заняло 3301 миллисекунду для обработки, в то время как rdr.GetString(1)
заняло 2640 миллисекунд (примерно 25% ускорение).В этом конкретном поставщике поиск имени использует отсортированный поиск для перевода имени в порядковый номер.