Cada vez que desee ejecutar una sentencia de SQL que no debe devolver un valor o un conjunto de registros, la ExecuteNonQuery debe ser utilizado.
Por lo tanto, si desea ejecutar una declaración de actualización, eliminar o insertar, debe utilizar ExecuteNonQuery. ExecuteNonQuery devuelve el número de filas afectadas por la declaración. Esto suena muy bien, pero cada vez que utiliza el SQL Server 2005 IDE o Visual Studio para crear un procedimiento almacenado, agrega una pequeña línea que arruina todo.
Esa línea es: SET NOCOUNT ON; Esta línea activa la característica NOCOUNT de SQL Server, que "Detiene el mensaje que indica el número de filas afectadas por una instrucción de Transact-SQL que se devuelve como parte de los resultados" y, por lo tanto, hace que el procedimiento almacenado siempre devuelva -1 cuando llamado desde la aplicación (en mi caso, una aplicación web).
En conclusión, elimine esa línea de su procedimiento almacenado, y ahora obtendrá un valor que indica el número de filas afectadas por la instrucción.
¡Feliz programación!
http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html
¿Cuál es el valor de retorno, si ejecutamos un StoredProcedure que insertará o actualizará o eliminará un registro en un Mesa, – Raghuveer