Se puede utilizar cuando el cmd.ExecuteScalar sproc utiliza @value RETORNO
-
21-08-2019 - |
Pregunta
¿Se puede utilizar
int blah = Convert.ToInt32(cmd.ExecuteScalar());
Cuando la última declaración de la sproc hace:
RETURN @value
Sólo puedo conseguir que funcione si lo hace:
@value SELECT
Además, esto me da una excepción de objeto nulo:
int blah = (int)cmd.ExecuteScalar();
No es Convert.ToInt32 y (int) lo mismo, pero uno es un envoltorio de la otra?
Solución
No, no se puede. El método ExecuteScalar () está diseñado para devolver valor como único que se devuelve en un conjunto de resultados. Básicamente, el valor en la primera columna de la primera fila devuelta.
Para obtener el valor de retorno, es necesario agregar un parámetro a su objeto SQLCommand. Usar el nombre "@RETURN_VALUE" y especifique una dirección de parámetros de rendimiento al crear el objeto de parámetro. A continuación, puede utilizar el método ExecuteNonQuery ().
debo señalar que la OMI, los valores de retorno de procedimientos almacenados simplemente debe indicar el estado del procedimiento. Todos los datos deben ser devueltos a través de conjuntos de resultados o parámetros de salida.
Otros consejos
Para responder a su otra pregunta, (int) es un molde que es, en realidad diferente que una conversión (Convert.ToInt32).
En un molde que son una especie de decir que el objeto que está siendo colado es realmente del tipo que está lanzando a lo que hay una verdadera conversión A / análisis se realiza. Desde un int no puede ser nulo el reparto no es válida cuando el objeto que está lanzando es nulo, y la excepción.
Con el convertido algunos actualy análisis sintáctico y la lógica tiene lugar y que se encarga de la situación en la que el objeto de ser convertido es nulo.
Hay alguna información más sobre este aquí .