Percebo que você não definiu o CommandType como StoredProcedure... Não sei se essa é a causa do seu problema ou não:
cmd.CommandType = CommandType.StoredProcedure;
Já fiz isso tantas vezes que não consigo contar.
Dica para acionar sua memória quando isso gerar exceções na próxima vez:
Abra o SQL Query Profiler enquanto estiver executando seu aplicativo. Quando cada comando é executado, ele mostra o SQL gerado e executado no lado do servidor. Se o SQL gerado começar com
sp_executesql
seguido por sua consulta, ele está sendo executado como uma consulta regular - ou seja, cmd.CommandType = CommandType.Text
, se começar com exec
, é provável que seja executado como um proc armazenado. Verifique se você está obtendo o SQL correto gerado para o tipo de consulta que está tentando executar.