c# - mysqlcommand - ¿Puedes usar cmd.ExecuteScalar cuando el sproc usa RETURN @value
sqlcommand c# reader (2)
No, no puedes. El método ExecuteScalar () está diseñado para devolver como único valor que se devuelve en un conjunto de resultados. Básicamente, el valor en la primera columna de la primera fila regresó.
Para obtener el valor devuelto, debe agregar un parámetro a su objeto SQLCommand. Use el nombre "@RETURN_VALUE" y especifique una dirección de parámetro de Return al crear el objeto de parámetro. Luego puede usar el método ExecuteNonQuery ().
Debo señalar que los valores de retorno de procedimientos almacenados de IMO deberían simplemente indicar el estado del procedimiento. Todos los datos deben devolverse a través de conjuntos de resultados o parámetros de salida.
Puedes usar
int blah = Convert.ToInt32(cmd.ExecuteScalar());
Cuando la última declaración de sproc lo hace:
RETURN @value
Solo puedo hacer que funcione si lo hace:
Selecciona valor
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 del otro?
Para responder a su otra pregunta, (int) es un elenco que, en realidad, es diferente de una conversión (Convert.ToInt32).
En un molde, estás diciendo que el objeto que se está lanzando es realmente del tipo al que estás lanzando, por lo que no se realiza ninguna conversión / análisis real. Como un int no puede ser nulo, el elenco no es válido cuando el objeto que está lanzando es nulo y se lanza la excepción.
Con la conversión se realiza un análisis sintáctico real y se lleva a cabo la lógica y se maneja la situación donde el objeto que se está convirtiendo es nulo.
Hay más información sobre esto aquí .