mmmmmm, a ver, veamos ....
hay varias diferencias entre lo que tienes y lo que tradicionalmente yo utilizo no se si se pueda como tu lo haces pero quizá ahí esta el problema; primero, estas usando un objeto command y estas definiendo parámetros al objeto, entonces creo solo debes llamar el método .Execute. Segundo, yo siempre les defino longitud a los parámetros aunque sean numéricos
Por lo demás, ese error puede ser por cualquier cosa: Hay valores asignados que no son válidos conforme con los parámetros que has definido; los tipos de datos de los parámetros no son igual que los del SP; traes un nulo, etc.
Si te pones a debuguear, es decir, a ver los tipos de dato de los parámetros, a ver los valores que recibes y que asignas y haces pruebas en el diseñador de consultas de la BD que uses, estoy seguro que en mucho menos de 3 días sacas el problema
Saludos