Leer codigo de salida procedimiento almacenado

08/09/2006 - 17:09 por Carmelo J. Morales Muñoz | Informe spam
hola!

tengo este procedimiento almacenado en SqlServer2005

PROCEDURE spLoginCorrecto

( @Login varchar(10),

@Clave varchar(15),

@IdUsuario Int output,

@EstadoCuenta int output

)

AS

BEGIN


SET NOCOUNT ON;


if ( (select count(*) from USUARIOS

where Login = @Login and Clave = @Clave) <> 0) begin



select

@IdUsuario = IdUsuario,

@EstadoCuenta = Estado from USUARIO

where Login = @Login and Clave = @Clave

return 0


end else begin


return 1

end

END



Como veis, en caso de éxito devuelve 0 y en caso de error devuelve 1.



Pues cuando ejecuto el proc almacenado desde C# siempre me devuelve -1, lo
ejecuto tal que así:



int codSalida = Convert.ToInt32(cmd.ExecuteNonQuery());



Sin embargo, si ejecuto el procedimiento almacenado desde SqlServerManager
si que me devuelve 0 ó 1; por lo que supongo mi error está en C#, ¿pueden
indicarme que estoy haciendo mal?.



gracias!
 

Leer las respuestas

#1 Alberto Poblacion
08/09/2006 - 18:24 | Informe spam
"Carmelo J. Morales Muñoz" wrote in message
news:%
tengo este procedimiento almacenado en SqlServer2005
[...]
return 0
[...] lo ejecuto tal que así:

int codSalida = Convert.ToInt32(cmd.ExecuteNonQuery());

Sin embargo, si ejecuto el procedimiento almacenado desde SqlServerManager
si que me devuelve 0 ó 1; por lo que supongo mi error está en C#, ¿pueden
indicarme que estoy haciendo mal?.



Tu error está en el el ExecuteNonQuery no devuelve el valor devuelto en
un "Return" por el procedimiento almacenado, sino que devuelve el número de
filas afectadas ("rowsaffected").

El valor del Return, desde el punto de vista de C#, es un parámetro de
salida del procedimiento almacenado, cuya propiedad "Direction" tienes que
establecer como "ReturnValue".

SqlParameter param = new SqlParameter("@Resultado", SqlDbType.Int);
param.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
int codSalida = Convert.ToInt32(param.Value);

Preguntas similares