无法将对象从DBNull强制转换为其他类型

时间:2012-09-14 03:46:48

标签: c# asp.net

我有一个像这样的插入存储过程

  if exists(select EmailId from Profile_Master where EmailId=@EmailId)
set @result=-1
else
begin
set @result=0


 insert into Profile_Master(FirstName,LastName,Dob,Gender,MobileNo,Country,State,EmailId,Password)
 values 
(@FirstName,@LastName,@Dob,@Gender,@MobileNo,@Country,@State,@EmailId,@Password)
set @id=SCOPE_IDENTITY()
return
end 

 pid = cmd1.Parameters.Add("@id", SqlDbType.Int);
            pid.Direction = ParameterDirection.Output;
            cmd1.ExecuteNonQuery();
            int res = Convert.ToInt32(pid.Value);

我正在捕捉最后插入记录的值,但是我收到了像

这样的错误

无法将对象从DBNull强制转换为其他类型。如何捕获最后插入记录的值?

2 个答案:

答案 0 :(得分:2)

在尝试转换值之前进行空检查。

if( pid.Value is DBNull )
{
    // Do alternative route.
}
else
{
    int res = Convert.ToInt32(pid.Value);
}

或:

if( ! pid.Value is DBNull )
{
    int res = Convert.ToInt32(pid.Value);
}

答案 1 :(得分:1)

嗯,显然我们可以假设pid.Value等于DBNull.Value且无法转换为int

类型

您需要检查sp对数据库返回的内容。