如何使用SqlDataReader获取浮点值?

Bas*_*rit 9 c# sql casting reader

在我的数据库中,我将NextStatDistanceTime值作为float.当" 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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Jer*_*ert 24

我想是时候换一张小桌了.

T-SQL type name | .NET equivalent | C# type name | DataReader method
----------------+-----------------+--------------+------------------------
FLOAT           | System.Double   | double       | IDataReader.GetDouble()
REAL            | System.Single   | float        | IDataReader.GetFloat()
Run Code Online (Sandbox Code Playgroud)

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

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

顺便说一下,这不是唯一的细微之处 - .NET浮点类型支持非规范化值,而T-SQL类型则不支持,因此.NET代码中的浮点数可能不是成功存储在数据库中,即使类型匹配.