Здравствуйте, Ranger_XL, Вы писали:
R_X>Спасибо — именно то, что нужно!
Да незачто

.
R_X>SQL injection нам не грозит (данные берутся из надежного и правильного источника), а вот на счет кеширования вопрос:
R_X>писать до цикла:
R_X>R_X> cmd.Parameters.Add("@data_type", SqlDbType.VarChar, 10);
R_X>
R_X>а затем в цикле
R_X>R_X> cmd.Parameters["data_type"].Value = rec.data_type;
R_X>
R_X>это принципиально для ускорения или же
R_X>R_X> cmd.Parameters.Add("@data_type", SqlDbType.VarChar, 10).Value = rec.data_type ;
R_X>
R_X>в цикле даст такой же результат? (реальное число полей для сохранения ~20.)
Если использовать 2-й вариант, то надо будет в начале тела цикла ставить command.Parameters.Clear(); Ибо иначе вы добавите в комманду несколько параметров с одинаковыми именами. Что же касается performance — если команда исполняется >1 раза, имхо, предпочтительнее первый вариант, ибо во втором происходит при каждом проходе цикла больше действий, чем в первом, но думаю это не особо существенно.
R_X>У foreach() реально есть какие-то преимущества или только наглядность?
Незнаю, но как минимум его наглядность, имхо, это уже конкретный плюс. Посмотрите интерфейсы IEnumerator и IEnumerable. А в C# 2.0 появилась еще и такая штука как итераторы — так там, наглядность вообще зашкаливает посравнению с любым другим способом организации прохода по коллекции.