2008-12-18 19 views
1

使用下面的代碼,我從MS SQL 05返回一個nvarchar字段,並繼續得到一個System.InvalidCastException。問題返回字段在MS SQL 2005 - System.InvalidCastException:

vo.PlacementID = dr.IsDBNull(0) ? null : dr.GetString(0); 

vo.PlacementID變量的類型爲String,所以應該沒有問題。 我試圖返回的值是這樣的(數字,數字,字母):00F,02A,01F等

System.InvalidCastException:無法強制轉換System.Int32類型的對象以鍵入System.String 」。 at System.Data.SqlClient.SqlBuffer.get_String() at System.Data.SqlClient.SqlDataReader.GetString(Int32 i)

任何幫助非常感謝。

+0

你能告訴我們你的SQL查詢嗎? – 2008-12-18 08:50:58

回答

1

如果再次讀取例外它給你一個線索的問題:

系統。 InvalidCastException的無法轉換類型 'System.Int32' 的目的是鍵入 'System.String'。在 System.Data.SqlClient.SqlBuffer.get_String() 在 System.Data.SqlClient.SqlDataReader.GetString(的Int32 ⅰ)

基本上在SqlDataReader的ISN的0列返回基礎數據類型是一個兼容字符串的類型,因此是演員例外。

我建議對違規行設置一個斷點,然後在即時窗口中執行以下行:

? dr.GetValue(0).GetType() 

這將告訴返回什麼類型。

0

InvalidCastException由於PlacementID屬性和string之間的類型不兼容而未被引發。如果是這樣,你會得到一個編譯時錯誤。問題是結果集中的第一個字段不是string,這是別的。

1

轉換異常不是在賦值中引發的,而是在datareader的GetString()中引發的。

嘗試dr.GetValue(0).ToString()