在我的数据库中,我具有NextStatDistanceTime值作为浮点数。执行“ float time = reader.GetFloat(0);”行时,出现错误
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); } } }
我想是时候放一张桌子了。
请注意,GetFloat名称有误-应该为GetSingle,因为float它是C#特定的名称。例如,在VB.NET中没有任何意义。
GetFloat
GetSingle
float
因此,如果您的数据库列属于类型FLOAT,请使用GetDouble而不是进行读取GetFloat。数据读取器方法 不 执行转换;有一种通用的GetValue方法来获取的值,object然后您可以将其进一步转换。
FLOAT
GetDouble
GetValue
object
顺便说一句,这不是唯一的精妙之处-.NET浮点类型支持非规范化值,而T- SQL类型不支持,因此,您的.NET代码中可能会有无法将浮点数包含在内的情况。成功地存储在数据库中,即使类型匹配。