Ответ 1
Одна разница заключается в том, как происходит переполнение сообщений.
Где я работал, у нас было несколько пакетных процессов, которые бежали за ночь. Многие из них просто использовали запуск хранимой процедуры. Раньше мы планировали их использовать SQL-сервер, но отошли от него, чтобы вместо этого вызывать процедуры из программы .Net. Это позволило нам сохранить все запланированные задачи в одном месте, даже те, которые не имели никакого отношения к Sql Server.
Это также позволило нам создать более эффективные функции ведения журнала в программе. Net, которая вызывает процедуры, так что протоколирование из всех процессов overnight было согласованным. Хранимые процедуры будут использовать функции sql print
и raiserror
, и программа .Net получит и зарегистрирует их. Мы узнали, что CommandType.StoredProcedure
всегда будет буферизовать эти сообщения в партиях около 50. Код .Net не будет видеть никаких событий журнала до тех пор, пока процедура не завершится или не сбросит буфер, независимо от того, какие параметры вы установили в соединении или что вы сделали это в своем sql. CommandType.Text
зафиксировал это для нас.
Как побочная проблема, я бы использовал явные типы с вашими параметрами запроса. Давая возможность .Net попытаться сделать вывод о том, что типы параметров могут вызывать проблемы в некоторых ситуациях.