2012-12-12 29 views
1

我有一個名爲EarlyHoursStartTime的數據庫列,它聲明爲float。指定的轉換與SQLDataReader上的GetFloat無效

然後,我有一些代碼,我遍歷整個表使用DataReader

SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
while (myReader.Read()) 
{ 

    cmdInsertLocation.Parameters.AddWithValue("@EarlyHoursStartTime", myReader.GetFloat(44)); <- Error here 


} 

我得到上面的AddwithValues線的錯誤。

「指定的演員表無效」。

當發生這種情況時,myReader.GetValue(44)顯示的值爲0.0。

我試過各種各樣的事情來解決這個問題就像把一個默認值,而不是如:

if (Convert.ToString(myReader.GetValue(44)) == "0.0") 

,但是這應該是不必要的,它不反正工作。

當值爲0.0時,爲什麼會收到無效的轉換異常?數據讀取器讀入的數據庫字段是Float,那麼問題是什麼?

+1

我認爲你應該使用'GetDouble'作爲[SQL float is double](http://msdn.microsoft.com/en-us/library/ms131092%28v=sql .90%29.aspx) – V4Vendetta

+0

@ V4Vendetta似乎已經解決了這個問題。你想把它寫成答案,以便我可以將其標記爲正確的? – iKode

+0

添加爲答覆:) – V4Vendetta

回答

0

爲什麼不嘗試

float _float = Convert.ToSingle(myReader[FloatCol].tostring()); 

我不10噸傾向於使用Oridnal的位置,因爲我覺得將一切呈現較少的問題(大部分時間)

問候

8

由於每Mapping list

SQL Server data type CLR data type (SQL Server) CLR data type (.NET Framework) 
float    SqlDouble     Double 

SQL float映射到雙數據類型,所以你應該嘗試使用GetDouble而不是GetFloat