2010-10-18 50 views
5

En SQL Server, ID es un entero no nulo y una identidad.¿Qué tipo de datos devuelve el método SQLCommand ExecuteScalar()?

Cuando ejecuto el siguiente código, me sale un InvalidCastException en la última línea:

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = _conn; 
cmd.CommandText = @"INSERT INTO [Users] (Name, Email, Password) VALUES (@name, @email, @pass); SELECT SCOPE_IDENTITY()"; 
cmd.Parameters.AddWithValue("@name", newUser.Name); 
cmd.Parameters.AddWithValue("@email", newUser.Email); 
cmd.Parameters.AddWithValue("@pass", newUser.PasswordHash); 
int id = (int)cmd.ExecuteScalar(); 

¿Cuál es ExecuteScalar() volver aquí? Cualquiera que sea su regreso tiene un ToString() que hace que se vea como un número, por lo que esta línea tremenda de código funciona:

int id = Int32.Parse(cmd.ExecuteScalar().ToString()); 
+7

¿Qué sucede si llama a 'GetType()'? – SLaks

+0

Guau, ¿por qué no pensé en eso? Devuelve un decimal. Gracias. – Patty

Respuesta

2

Es probable que devolver una instancia de caja de un tipo numérico diferente, como long.
A boxed long cannot be converted to int.

Puede llamar al GetType() en el valor de retorno para ver qué tipo es realmente.

+1

Para expandir esta respuesta, ExecuteScalar return type es Object, lo que significa que cualquier tipo de valor habrá sido encuadrado, no puede convertir un tipo de valor encuadrado en otra cosa que no sea el tipo original –

0

Desde el final de la instrucción INSERT

SELECT SCOPE_IDENTITY() 

Se devolver el valor de identidad de la fila insertada en la tabla [Usuarios].

9

SCOPE_IDENTITY() devuelve decimal en código, también conocido como NUMERIC(38,0) en TSQL.

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Así que si quieres un reparto directo, puede hacerlo (int)(decimal)cmd.ExecuteScalar();. Tenga en cuenta que una conversión de decimal a int puede perder información en el sentido más estricto, así que tenga en cuenta. Pero con su columna de identidad como un número entero, la conversión será segura.

Cuestiones relacionadas