Solución:
¿Qué tipo de consulta realizas? Utilizando ExecuteNonQuery
está destinado a UPDATE
, INSERT
y DELETE
consultas. Según la documentación:
Para las declaraciones UPDATE, INSERT y DELETE, el valor de retorno es el número de filas afectadas por el comando. Cuando existe un desencadenante en una tabla que se está insertando o actualizando, el valor de retorno incluye el número de filas afectadas por la operación de inserción o actualización y el número de filas afectadas por el desencadenante o desencadenadores. Para todos los demás tipos de declaraciones, el valor de retorno es -1.
Siempre que desee ejecutar una declaración SQL que no debería devolver un valor o un conjunto de registros, se debería utilizar ExecuteNonQuery.
Por lo tanto, si desea ejecutar una declaración de actualización, eliminación o inserción, debe usar ExecuteNonQuery. ExecuteNonQuery devuelve el número de filas afectadas por la instrucción. Esto suena muy bien, pero cada vez que usa el IDE de SQL Server 2005 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 función NOCOUNT de SQL Server, que “evita que el mensaje que indica el número de filas afectadas por una instrucción Transact-SQL se devuelva 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 declaración.
¡Feliz programación!
http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html
Tu usas EXECUTENONQUERY()
por INSERT
,UPDATE
y DELETE
.
Pero para SELECT
debes usar EXECUTEREADER()
………