Mantén la atención porque en este tutorial encontrarás la contestación que buscas.
Solución:
Es hora de una mesita, creo.
Nombre de tipo T-SQL | Equivalente a .NET | nombre de tipo C# | DataReader método |
---|---|---|---|
FLOAT |
System.Double |
double |
IDataReader.GetDouble() |
REAL |
System.Single |
float |
IDataReader.GetFloat() |
Tenga en cuenta que GetFloat
tiene el nombre incorrecto, debería ser GetSingle
porque float
es un nombre específico de C#. No tiene sentido en VB.NET, por ejemplo.
Entonces, si la columna de su base de datos es del tipo FLOAT
léelo usando GetDouble
no GetFloat
. Los métodos del lector de datos no no realizar conversiones; hay un generico GetValue
método para obtener el valor como un object
que luego puede convertir más.
Por cierto, esta no es la única sutileza: los tipos de coma flotante de .NET admiten valores desnormalizados, mientras que los tipos de T-SQL no, por lo que es posible tener números de coma flotante en el código de .NET que no se pueden almacenado correctamente en la base de datos, incluso si los tipos coinciden.
Como puede leer aquí, un flotante del servidor sql se asigna a un doble .NET, por lo que debe usar GetDouble
:
double totaltime = 0; // necessary, double is wider than float
// ...
while (reader.Read())
double time = reader.GetDouble(0);
totaltime = totaltime + time;
// conn.Close(); no, not in this loop, should be closed in the finally or via using-statement
Supongo que la base de datos está devolviendo el doble de valor, intente obtenerlo como Double
y convertirlo float
(si es requerido).
float time= (float) reader.GetDouble(0);