2009-10-03 69 views
1

我有一個奇怪的問題,這裏的設置:爲什麼在將對象轉換爲整數時會出現InvalidCastException?

ASP.NET 3.5應用程序/ MSSQLSERVER 2008後端。

我打電話的ExecuteScalar從我的代碼,它返回一個對象,然後我試圖鑄造該對象INT(其實我有一個通用的方法

T ConvertDBValue<T>(object o) {...} 

,但是這並不重要)。

的ExecuteScalar被擊中以下存儲過程:

... 
insert into ... 
select scope_identity() 

我的主鍵是一個標識字段,並返回85。接下來的事情我是InvalidCastException的嘗試投放85爲int。

的解決方案是從存儲過程返回之前,創建一個int變量,並分配SCOPE_IDENTITY()把它如下:

... 
DECLARE @x int 
insert into ... 
select @x = scope_identity() 
select @x 

有人可以告訴我什麼是我的第一個方法的問題,爲什麼不把它投射到int?

回答

6

scope_identity()的實際返回(TSQL)BIGINT(我已經被這個抓前!)

所以,你的代碼試圖蒙上了BIGINT爲int。

+0

這是記錄在哪裏? – 2009-10-03 03:05:46

+0

請參閱說明返回類型的鏈接部分... – 2009-10-03 03:14:01

+0

它表示它返回'numeric(38,0)',而不是'bigint'?無論哪種方式,您都可以通過幾種方式解決這個問題,無論是在代碼中還是在SQL中。在SQL中,你可以這樣做'SELECT CAST(SCOPE_IDENTITY()as int)',或者在你的C#中,你可以這樣做'int x = Convert.ToInt32(whatever)'。但是,正如原來的海報發現,使用輸出或返回參數當然會否定這種需要... – Funka 2010-03-10 01:31:55

相關問題