In SQL Server, ID is a not null integer, and an identity.
When I run the following code, I get an InvalidCastException on the last line:
SqlCommand
It's probably returning a boxed instance of a different numeric type, such as long
.
A boxed long cannot be converted to int.
You can call GetType()
on the return value to see what type it really is.
SCOPE_IDENTITY()
returns a decimal
in code, otherwise known as NUMERIC(38,0)
in TSQL.
http://msdn.microsoft.com/en-us/library/ms190315.aspx
So if you want a direct cast, you can do (int)(decimal)cmd.ExecuteScalar();
. Note that a decimal to int conversion can lose information in the strictest sense, so just be advised. But with your identity column being an integer, the conversion will be safe.
From the end of your INSERT statement
SELECT SCOPE_IDENTITY()
It's returning the identity value of the row inserted into the [Users] table.