Один из вариантов - иметь что-то среднее:
private const int NameColumn = 0;
...
name = dt.Rows[0][NameColumn];
Это дает вам одно место для изменения, если меняется порядок / определения столбцов, но также дает читаемый код в точке доступа. Я не уверен, что это решает проблему необходимости одновременного изменения и кода пользовательского интерфейса, и хранимых процедур: если ваши SP эффективно меняют свой открытый интерфейс, вы должны ожидать , чтобы изменить код пользовательского интерфейса , Тем не менее, этот подход может уменьшить боль от этих изменений, а также не засорять ваш код магическими значениями.
(Возможно, вы захотите рассмотреть строго типизированные наборы данных ... или перейти на решение, не относящееся к DataTable
, например Entity Framework. Возможно, оно не подходит в вашей ситуации, но стоит задуматься.)