SQL返回浮点型时,ExecuteScalar返回双精度型

时间:2018-11-28 12:17:09

标签: c# sql-server

即使从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文档中找不到任何内容来说明浮点数是双精度的,还有没有更明智的方式...?

谢谢。

1 个答案:

答案 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