C# 当SQL返回浮点值时,ExecuteScalar返回双精度
我的C#ExecuteScalar命令在分配给浮点时从调用中抛出了一个无效的强制转换,即使来自SQL的返回值是浮点。所以我做了一个简单的测试如下: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
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)”