stored returns query non negative c# asp.net

c# - returns - executescalar



ExecuteNonQuery no devuelve resultados (9)

Este es mi código (aproximado) (DAL):

int i; // Some other declarations SqlCommand myCmdObject = new SqlCommand("some query"); conn.open(); i = myCmdObject.ExecuteNonQuery(); conn.close();

El problema es: aunque hay un registro presente en mi consulta SELECT , el valor en i permanece en -1 .

¿Cual podría ser el problema?


Si desea ejecutar una actualización, eliminar o insertar una declaración, debe usar ExecuteNonQuery. ExecuteNonQuery devuelve el número de filas afectadas por la instrucción.

Cómo configurar la cuenta en


¿Podrías publicar la consulta exacta? El método ExecuteNonQuery devuelve la @@ROWCOUNT Sql Server lo que sea después de que se haya ejecutado la última consulta es lo que ExecuteNonQuery método ExecuteNonQuery .


¿Qué tipo de consulta realizas? El uso de ExecuteNonQuery está destinado a consultas de UPDATE , INSERT y DELETE . 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 activador en una tabla que se inserta o actualiza, 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 activador o activadores. Para todos los demás tipos de declaraciones, el valor de retorno es -1.


Desde MSDN: SqlCommand.ExecuteNonQuery Method

Puede usar ExecuteNonQuery para realizar operaciones de catálogo (por ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos como tablas), o para cambiar los datos en una base de datos sin usar un DataSet ejecutando las instrucciones UPDATE, INSERT o DELETE.

Aunque ExecuteNonQuery no devuelve filas, todos los parámetros de salida o los valores de retorno asignados a los parámetros se completan con datos.

Para las declaraciones UPDATE, INSERT y DELETE, el valor de retorno es el número de filas afectadas por el comando. Cuando existe un activador en una tabla que se inserta o actualiza, 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 activador o activadores. Para todos los demás tipos de declaraciones, el valor de retorno es -1 . Si se produce una reversión, el valor de retorno también es -1.

Está utilizando la consulta SELECT, por lo tanto, obtiene -1


El método ExecuteNonQuery se usa para sentencias de SQL que no son consultas, como INSERT , UPDATE , ... Desea usar ExecuteScalar o ExecuteReader si espera que su sentencia devuelva resultados (es decir, una consulta).



Si lo que desea es obtener un solo entero de la consulta, use:

myCmdObject.ExecuteScalar()


Siempre que desee ejecutar una instrucción SQL que no debe devolver un valor o un conjunto de registros, se debe utilizar ExecuteNonQuery.

Por lo tanto, si desea ejecutar una actualización, eliminar o insertar una declaración, debe usar ExecuteNonQuery. ExecuteNonQuery devuelve el número de filas afectadas por la instrucción. Esto suena muy bien, pero siempre que use el IDE de SQL Server 2005 o Visual Studio para crear un procedimiento almacenado, se 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 "Detiene el mensaje que indica que la cantidad de filas afectadas por una instrucción Transact-SQL 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 declaración.

¡Feliz programación!

http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html


Utiliza EXECUTENONQUERY() para INSERT , UPDATE y DELETE .

Pero para SELECT debes usar EXECUTEREADER() .........