即使从SQL返回的值是浮点数,我的C#ExecuteScalar命令在分配给浮点数时从调用中抛出了无效的强制转换。所以我做了一个简单的测试,如下所示:
sqlCU = "select cast(1 as float)";
using (SqlCommand command = new SqlCommand(sqlCU, con))
{
object cuP5300x = command.ExecuteScalar();
}
回头总是双倍。
所以要修复它,我必须做一些我认为很愚蠢的事情:
float cuP5300x = (float)((double)command.ExecuteScalar())
因为如上所述
float cuP5300x = (float)command.ExecuteScalar();
导致无效的强制转换异常。
任何人都可以解释为什么,我在MS文档中找不到任何内容来说明浮点数是双精度的,还有没有更明智的方式...?
谢谢。
答案 0 :(得分:2)
“任何人都可以解释为什么,我在MS文档中找不到任何内容来表示浮点数是双精度数,并且还有更明智的方法吗……?”
它在文档SQL Server Data Type Mappings中。
具体来说,对于SQL Server数据库引擎类型Float
,. NET Framework类型为Double
。另外,SqlDbType枚举为Float
,SqlDataReader SqlTypes类型的访问器为GetSqlDouble
,DbType枚举为Double
,而SqlDataReader DbType类型的访问器为GetDouble
。
SQL Server Database Engine type NET Framework type SqlDbType enumeration SqlDataReader SqlTypes typed accessor DbType enumeration SqlDataReader DbType typed accessor
------------------------------- ------------------ --------------------- ------------------------------------- ------------------ -----------------------------------
float Double Float GetSqlDouble Double GetDouble