2014-02-19 90 views
0

我遇到了从浮点SQL数据类型显示到我的文本框的问题。到目前为止,我可以获得字符串以及int数据类型。当谈到浮动或甚至小数时,它想要抛出一个合适的,我不完全确定为什么。这是我得到的错误:显示浮点SQL数据类型

不能将类型'float'隐式转换为'int'。一个明确的 转换不存在(是否缺少强制转换?)

如何强制ships.Height = (float)shipReader["HeightTest"];是一个浮动,而不是一个int,因为如果我刚刚离开它作为一个int它仍然没有显示它抛出一个错误。当你运行它时会弹出一条错误消息,“指定的转换无效”。

SqlDataReader shipReader = 
        selectCommand.ExecuteReader(CommandBehavior.SingleRow); 
if(shipReader.Read()) 
{ 
    Ships ships = new Ships(); 
    ships.Role = shipReader["Role"].ToString(); 
    ships.Description = shipReader["Description"].ToString(); 
    ships.NullCargoMass = (int)shipReader["NullCargoMass"]; 
    ships.Height = (float)shipReader["HeightTest"]; 
    return ships; 
} 
+1

什么是HeightTest的确切数据库类型?以及什么是Ships.Height的类型? –

+0

当你提到Ships.Height时,我不确定它究竟分配了哪种数据类型,直到我看看我的其他类。现在我想出了我的问题,谢谢。 – Shido

回答

2
ships.Height = Convert.ToSingle(shipReader["HeightTest"]); 
+0

仍然得到:不能隐式地将类型'float'转换为'int'。使用此代码时存在明确的转换(是否缺少转换?)错误消息。 – Shido

+0

什么是ship.Height的数据类型? –

+0

事实上,它确实工作我没有注意到我有一个int类的另一个类。我切换它,现在它正在工作,这个代码的作品。谢谢 – Shido

1

使用辅助方法GetFloat通过SqlDataReader对象可用。

shipReader.GetFloat(shipReader.GetOrdinal("HeightTest")) 
+0

谢谢这段代码也适用于我。 – Shido

+0

只是这个问题的范围之外的提示,但最好的做法是将'SqlDataReader'对象放在using语句中。它不仅确保当不再需要对象消耗的非托管资源时,而且还可以将它作为一个检查来使用,以确保在读取完成时关闭SqlDataReader。请记住,Dispose()为'SqlDataReader'调用Close()。 –