在我的数据库中,我将 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);
}
}
}
原文由 basakes 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想是时候换一张小桌子了。
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 代码中可能有浮点数不能成功存储在数据库中,即使类型匹配。