В качестве альтернативы ответу от casperOne было бы легко уменьшить порядковые поиски, которые будут выполняться один раз за время существования приложения. Это также может быть сделано без необходимости вручную поддерживать переменные для записи каждого из индексов.
Следующий код ожидает один запрос на класс, если вы хотите обработать несколько в одном классе, это будет достаточно просто выполнить.
Начните с поля:
static readonly ConcurrentDictionary<string, int> OrdinalMap =
new ConcurrentDictionary<string, int>();
Затем обновите свой код доступа, например:
reader.GetString(OrdinalMap.GetOrAdd("MyFieldName", reader.GetOrdinal))
Теперь у вас есть потокобезопасный O (1) поиск ординалов без необходимости поддерживать какие-либо ручные карты переменных или констант использования, которые, если вы измените запрос, разрушат мир. Не то чтобы это имело значение, но просто для ясности из-за поведения GetOrAdd, если вы выполняете много запросов одновременно, возможно, что reader.GetOrdinal("MyFieldName")
может выполняться несколько раз, а не точно один раз, но для всех намерений и целей это может рассматривается как один раз.