Principales respuestas
La Conversion Especificada no es válida

Pregunta
-
Estoy en un proyecto de WPF, accediendo a una base de datos de SQL mediante un DataReader, y me está marcando un error que no sé cómo resolver:
SqlDataReader sqlreader = comm.ExecuteReader(); if (sqlreader.HasRows) { while (sqlreader.Read()) { MessageBox.Show("Type: " + sqlreader.GetDataTypeName(2)); lsFacturas.Add(new FacturacionCL { Codigo = sqlreader.GetInt32(0), Descripcion = sqlreader.GetString(1), NetoB04 = sqlreader.GetFloat(2)
puse un MessageBox para ver qué tipo de dato me regresa la columna 2, y me dice que es un float, pero cuando quiero hacerle el GetFloat me marca el error "La Conversion Especificada no es válida"
El query en esa columna trae un SUM del campo Neto que en la tabla de SQL es un (float, null)
La propiedad NetoB04 del List lsFacturas, en donde lo quiero poner, es un float
Las otras 2 columnas (0 - Codigo y 1 - Descripcion) si me las trae correctamente
Dónde está el problema??
cyndyrdz
Respuestas
-
Pruébalo como double
sqlreader.GetDouble()
Por otro lado, te recomiendo traer con el nombre y no su posición
sqlreader.dr.Int32(dr.GetOrdinal("campoCodigo")); ... ..
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
-
{...} El query en esa columna trae un SUM() del campo Neto que en la tabla de SQL es un (float, null). La propiedad NetoB04 del List<lsFacturas>, en donde lo quiero poner, es un float.
El equivalente del tipo float de SQL Server en el marco de trabajo de .NET es el tipo Double, por tanto tienes dos opciones:
- Mantienes el tipo float de la propiedad 'NetoB04' y "casteas" el resultado:
NetoB04 = (float)sqlreader.GetDouble(2)
- Cambias el tipo de la propiedad 'NetoB04' a double:
NetoB04 = sqlreader.GetDouble(2)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator viernes, 21 de abril de 2017 16:42
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
-
Gracias Bryan, no se que es dr pero seguí tu sugerencia de no usar el índice y quedó así:
Codigo = Convert.ToInt32(sqlreader["Codigo"].ToString()), Descripcion = (sqlreader["Descripcion"].ToString()), NetoB04 = (float)Convert.ToDouble(sqlreader["NetoB04"].ToString()), ToneladasB04 = (float)Convert.ToDouble(sqlreader["ToneladasB04"].ToString()), (3), ImporteB04 = Convert.ToDecimal(sqlreader["ImporteB04"].ToString()),
Saludos y gracias
cyndyrdz
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
Todas las respuestas
-
Pruébalo como double
sqlreader.GetDouble()
Por otro lado, te recomiendo traer con el nombre y no su posición
sqlreader.dr.Int32(dr.GetOrdinal("campoCodigo")); ... ..
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
-
{...} El query en esa columna trae un SUM() del campo Neto que en la tabla de SQL es un (float, null). La propiedad NetoB04 del List<lsFacturas>, en donde lo quiero poner, es un float.
El equivalente del tipo float de SQL Server en el marco de trabajo de .NET es el tipo Double, por tanto tienes dos opciones:
- Mantienes el tipo float de la propiedad 'NetoB04' y "casteas" el resultado:
NetoB04 = (float)sqlreader.GetDouble(2)
- Cambias el tipo de la propiedad 'NetoB04' a double:
NetoB04 = sqlreader.GetDouble(2)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator viernes, 21 de abril de 2017 16:42
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
-
-
Gracias Bryan, no se que es dr pero seguí tu sugerencia de no usar el índice y quedó así:
Codigo = Convert.ToInt32(sqlreader["Codigo"].ToString()), Descripcion = (sqlreader["Descripcion"].ToString()), NetoB04 = (float)Convert.ToDouble(sqlreader["NetoB04"].ToString()), ToneladasB04 = (float)Convert.ToDouble(sqlreader["ToneladasB04"].ToString()), (3), ImporteB04 = Convert.ToDecimal(sqlreader["ImporteB04"].ToString()),
Saludos y gracias
cyndyrdz
- Marcado como respuesta Cynthia Rodriguez viernes, 21 de abril de 2017 16:46
-
Hola
En realidad solo sqlreader.GetInt......
lo que sucede es que tengo por costumbre llamarlo dr (en este caso tu lo llamaste sqlreader)
Saludos!
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
- Editado Brayan De La Cruz viernes, 21 de abril de 2017 16:52