Забелязвам, че не сте задали CommandType на StoredProcedure... Не знам дали това е причината за проблема ви или не:
cmd.CommandType = CommandType.StoredProcedure;
Самият аз съм правил това толкова много пъти, че не мога да преброя.
Съвет за активиране на паметта ви, когато това хвърля изключения следващия път:
Отворете SQL Query Profiler, докато изпълнявате приложението си. Когато всяка команда се изпълни, тя показва SQL, генериран и изпълнен от страната на сървъра. Ако генерираният SQL започва с sp_executesql
последвано от вашата заявка, тогава тя се изпълнява като обикновена заявка - т.е. cmd.CommandType = CommandType.Text
, ако започва с exec
, шансовете са, че се изпълнява като съхранена процедура. Уверете се, че получавате правилния генериран SQL за типа заявка, която се опитвате да изпълните.