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?

¿Fue útil?

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í .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top