一尘不染

如何使用SqlDataReader获取浮点值?

sql

在我的数据库中,我具有NextStatDistanceTime值作为浮点数。执行“ float time = reader.GetFloat(0);”行时,出现错误

系统无效的强制转换异常

如何在此代码中从sql命令获取浮点值?

这是我的代码:

using (SqlConnection conn = new SqlConnection(@"<myconnectionstring>"))
{
    float totaltime = 0;
    for (int i = startStationIndex; i < endStationIndex; i++)
    {
        SqlCommand command = new SqlCommand("SELECT NextStatDistanceTime FROM [MetroDatabase].[dbo].[MetroStation] WHERE StationIndex = " + i + "", conn);
        try
        {
            conn.Open();
            command.ExecuteNonQuery();
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    float time = reader.GetFloat(0);
                    totaltime = totaltime + time;
                    conn.Close();
                }
            }                        
        }
        catch (Exception ex)
        {
            result = ex.Message;
            Console.WriteLine(ex.Message);
        }
    }

}

阅读 219

收藏
2021-03-10

共1个答案

一尘不染

我想是时候放一张桌子了。

T-SQL类型名称 相当于.NET C#类型名称 `DataReader` 方法
`FLOAT` `System.Double` `double` `IDataReader.GetDouble()`
`REAL` `System.Single` `float` `IDataReader.GetFloat() `

请注意,GetFloat名称有误-应该为GetSingle,因为float它是C#特定的名称。例如,在VB.NET中没有任何意义。

因此,如果您的数据库列属于类型FLOAT,请使用GetDouble而不是进行读取GetFloat。数据读取器方法
执行转换;有一种通用的GetValue方法来获取的值,object然后您可以将其进一步转换。

顺便说一句,这不是唯一的精妙之处-.NET浮点类型支持非规范化值,而T-
SQL类型不支持,因此,您的.NET代码中可能会有无法将浮点数包含在内的情况。成功地存储在数据库中,即使类型匹配。

2021-03-10