2012-09-14 85 views
0

我已經插入存儲這樣對象不能從DBNull轉換到其他類型的

if exists(select EmailId from Profile_Master where [email protected]) 
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轉換爲其他類型。如何捕獲最後插入的記錄的值?

+0

如果你期待ID回來與標識值你確定Profile_Master的表定義實際上包含標識列? – blowdart

+0

userid列是表中的標識列。 –

+0

你確定嗎?如果@id爲空,則a)標識列不填充或b)存儲過程參數列表忘記將id標記爲輸出。 - 您應該編輯幷包含整體sp定義,包括創建行和表格定義 – blowdart

回答

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); 
} 
+0

pid是一個sqlparameter,它說不能應用操作符!到'object'類型的操作數 –

+1

您可以使用pid.Value == DBNull.Value –

+0

現在我不能返回res的值。 –

1

好吧,很顯然,我們可以假設pid.Value等於DBNull.Value,不能轉換爲類型int

你需要檢查一下SP做ADN它從數據庫返回。

+0

如何檢查SP返回的內容? –

+0

如果您直接針對數據庫執行SP,會發生什麼情況?你在使用哪個數據庫? –

+0

我正在使用sql server 2005,我正在檢查一個重複的電子郵件值,然後我捕捉最後插入的記錄值。更新了這個問題。 –

相關問題