Visual CSharp .NET - Problema con conexion a Base de Datos(InvalidCastException)

 
Vista:
sin imagen de perfil

Problema con conexion a Base de Datos(InvalidCastException)

Publicado por Geronimo (2 intervenciones) el 06/12/2015 03:31:58
mi problema es el siguiente: Tengo esta tabla en la base de datos(SQLserver 2008):
CREATE TABLE Alquileres (
Codigo INT IDENTITY,
IdPelicula INT FOREIGN KEY REFERENCES Peliculas(Id),
CICliente BIGINT FOREIGN KEY REFERENCES Clientes(CI),
FechaInicio DATETIME NOT NULL,
FechaFinal DATETIME NOT NULL,
CostoTotal FLOAT NOT NULL,
PRIMARY KEY(Codigo, IdPelicula, CICliente)
);
Desde mi aplicacion tengo que guardar en un List<Alquileres> todos los alquileres que me traigo con un DataReader de esta manera

while (drListadoAlquiler.Read())
{
alquiler = new Alquiler((int)drListadoAlquiler["Codigo"], (DateTime)drListadoAlquiler["FechaInicio"], (DateTime)drListadoAlquiler["FechaFinal"], (int)drListadoAlquiler["CICliente"], (int)drListadoAlquiler["IdPelicula"], (double)drListadoAlquiler["CostoTotal"]);
alquileres.Add(alquiler);
}

MI PROBLEMA ES QUE AL MOMENTO DE PASAR POR ESTA LINEA DE CODIGO DE MI APLICACION, ME TIRA UN InvalidCastException, segun el tipo de dato de la base de datos y al que casteo en mi aplicacion no deberia generar ningun error de casteo no es asi?, desde ya gracias, es el unico problema que tengo en la aplicacion y es para entregar en mis estudios, si pudieran ayudarme les agradesco
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema con conexion a Base de Datos(InvalidCastException)

Publicado por Geronimo (2 intervenciones) el 06/12/2015 03:57:54
ACTUALIZACION: El StackTrace me dice esto: " en Persistencia.PersistenciaAlquiler.ListarXpelicula(Int32 codigoPelicula, Double& totalRecaudado)"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con conexion a Base de Datos(InvalidCastException)

Publicado por Marcelo (5 intervenciones) el 17/12/2015 15:57:55
Geronimo, como estas?

Como habrás notado, el casteo directo de lo obtenido en la base de datos puede ser un dolor de cabeza, por lo que te recomiendo 2 opciones.

Opción 1 utilizar las transformaciones que ofrece el DataReader como por ejemplo el .GetInt32 para castear el valor directamente como un int.

Opción 2 (Mi favorita) es que parses los valores (la linea te quedaría)

1
alquiler = new Alquiler(int.Parse(drListadoAlquiler["Codigo"].ToString()), DateTime.Parse(drListadoAlquiler["FechaInicio"].ToString()), DateTime.Parse(drListadoAlquiler["FechaFinal"].ToString()), int.Parse(drListadoAlquiler["CICliente"].ToString), int.Parse(drListadoAlquiler["IdPelicula"].ToString()), double.Parse(drListadoAlquiler["CostoTotal"].ToString()));

Esta ultima opción es la mas segura dado que tu pasas el objeto a string y luego lo parseas al nativo o clase que te interese de forma mas segura

Espero sea de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con conexion a Base de Datos(InvalidCastException)

Publicado por Marcelo (5 intervenciones) el 17/12/2015 16:00:53
Olvide agregar que tengas presente que salvo que especifiques nativos nulleables los mismos no pueden recibir elementos en null o vacios (no puedes asignarle a un int un null o un vacio salvo que especifiques que el int es nulleable)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar