C# 当SQL返回浮点值时,ExecuteScalar返回双精度

C# 当SQL返回浮点值时,ExecuteScalar返回双精度,c#,sql-server,C#,Sql Server,我的C#ExecuteScalar命令在分配给浮点时从调用中抛出了一个无效的强制转换,即使来自SQL的返回值是浮点。所以我做了一个简单的测试如下: sqlCU = "select cast(1 as float)"; using (SqlCommand command = new SqlCommand(sqlCU, con)) { object cuP5300x = command.Execu

我的C#ExecuteScalar命令在分配给浮点时从调用中抛出了一个无效的强制转换,即使来自SQL的返回值是浮点。所以我做了一个简单的测试如下:

            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文档中找不到任何东西可以说浮动是双倍的,有没有更合理的方法

谢谢。

“谁能解释一下为什么,我在MS文档中找不到任何东西可以说浮动是双倍的,有没有更合理的方法……”

它在文档中:

具体地说,对于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
“有人能解释一下为什么,我在MS文档中找不到任何东西可以说浮动是双倍的,有没有更合理的方法……”

它在文档中:

具体地说,对于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

如果您使用的是
real
而不是
float
,那么可能会发生重复的情况,或者您可以简单地使用
Convert.ToFloat(command.ExecuteScalar())
,不再担心返回值的类型。但是你仍然需要考虑DbNull,谢谢你,转换看起来比我的双击要好,但是BTW,ToSingle不太擅长:)如果你使用<代码> Reals而不是<代码>浮点< /C> >,或者你可以简单地使用<代码> Real.ToFloat(Cord.Excel),不再担心返回值的类型。但是你仍然需要考虑DbNull,谢谢你,转换看起来比我的双人演员好,但是顺便说一句,这是ToSingle不说:“啊,谢谢,我从来没有找到过那一页。”看着它,我从来没有想过SQL Server中不存在“double”,所以可能是float,而不仅仅是另一个“number(x,x)”啊,谢谢,我从来没有找到过那个页面。看着它,我从未想过SQL Server中不存在“double”,所以可能是float,而不仅仅是另一个“number(x,x)”