Здравствуйте, kostya.misura, Вы писали:
Спасибо — именно то, что нужно!
KM>ИМХО вместо явного использования метода SqlTransaction.Rollback, гораздо удобнее оборачивать транзакцию в блок using.
Вариант c try { rollback() } был взят из примера в MSDN, с using() все намного красивее.
KM>1. Я бы использовал вместо динамческой генерации sql, параметры. Это спасает от всяких бяк типа sql injection + код в таком случае выглядит нагляднее + теоретическая прибавка к performance (ADO.NET исполняет все запросы через sp_executesql, которая умеет кешировать план запроса)
SQL injection нам не грозит (данные берутся из надежного и правильного источника), а вот на счет кеширования вопрос:
писать до цикла:
cmd.Parameters.Add("@data_type", SqlDbType.VarChar, 10);
а затем в цикле
cmd.Parameters["data_type"].Value = rec.data_type;
это принципиально для ускорения или же
cmd.Parameters.Add("@data_type", SqlDbType.VarChar, 10).Value = rec.data_type ;
в цикле даст такой же результат? (реальное число полей для сохранения ~20.)
KM>2. Вместо for в данном случае, по-моему удобнее использовать foreach.
У foreach() реально есть какие-то преимущества или только наглядность?