SQLCommand方法ExecuteScalar()返回什么数据类型?
在SQL Server中,ID是非空整数和标识。
当我运行以下代码时,我在最后一行得到一个InvalidCastException:
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();
什么是ExecuteScalar()在这里返回? 无论它返回什么,都有一个ToString()使它看起来像一个数字,所以这个可怕的代码行工作:
int id = Int32.Parse(cmd.ExecuteScalar().ToString());
SCOPE_IDENTITY()
在代码中返回一个decimal
,在TSQL中也称为NUMERIC(38,0)
。
http://msdn.microsoft.com/en-us/library/ms190315.aspx
所以如果你想要一个直接(int)(decimal)cmd.ExecuteScalar();
,你可以做(int)(decimal)cmd.ExecuteScalar();
。 请注意,十进制到int转换可能会在最严格的意义上丢失信息,因此请注意。 但是如果您的标识列是整数,则转换将是安全的。
它可能返回一个不同数字类型的盒装实例,例如long
。
盒装long
不能转换为int
。
您可以在返回值上调用GetType()
以查看它的实际类型。
从INSERT语句的末尾开始
SELECT SCOPE_IDENTITY()
它返回插入[Users]表中的行的标识值。