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代码中的浮点数可能不是成功存储在数据库中,即使类型匹配.
| 归档时间: |
|
| 查看次数: |
19102 次 |
| 最近记录: |