Я полностью согласен с Джошем - позиции полей действительно такие, как вы указываете их в тексте SQL-запроса.
НО: я бы все же предпочел использовать имена столбцов, так как они более устойчивы. Например. Что делать, если вам нужно добавить поле в ваш запрос SQL?
command.CommandText = "SELECT [name], [jobtitle], [city], [country] WHERE [id] = @id";
Теперь внезапно вам нужно переписать весь код, чтобы изменить позиции ....
Что я обычно делаю вне цикла, который перечисляет все строки, возвращаемые считывателем данных, так это определяет позиции каждого интересующего меня поля:
int namePosition = reader.GetOrdinal("name");
int cityPosition = reader.GetOrdinal("city");
и затем я использую эти позиции внутри своего цикла, обрабатывающего данные, чтобы получить быстрый доступ к отдельным полям. Таким образом, вы определяете позиции только один раз, но вы используете позиции в цикле по данным - лучшее из обоих миров! : -)
Марк