0

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

  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 转换为其他类型。如何捕获最后插入的记录的值?

4

2 回答 2

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);
}
于 2012-09-14T03:52:09.513 回答
1

好吧,显然我们可以假设pid.Value等于DBNull.Value并且不能转换为类型int

您需要检查 sp 做了什么以及它从数据库返回了什么。

于 2012-09-14T03:49:09.453 回答