Saltar al contenido

¿Cómo obtener valor flotante con SqlDataReader?

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 GetSingleporque 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 FLOATléelo usando GetDoubleno 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);

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *