Problemas con Fechas y DateTime

19/08/2004 - 13:32 por Oriol | Informe spam
Hola a todos,

Tengo un pequeño problema y supongo que no se encontrar la solucion.

Tengo unos datos en una Base de datos MS SQL en formato SmallDateTime.
Algunos estan llenos con fecha y otros contienen NULL.

Cuando intento recuperar esos datos de la Base de datos mediante un
StoredProcedure (el cual funciona bien, testeado con el Query Analizer), me
da problemas con los valores null al intentar ponerlos en una variable de
tipo DateTime.

El proceso de recuperacion de datos es este: (Trabajo en C# y Winforms)

public static ArrayList ListarInformesPorCliente(string IdCliente)
{
ArrayList arData = new ArrayList();
SqlCommand cmdInforme= new SqlCommand();
cmdInforme.Connection = Sistema.conexionLocal;
cmdInforme.CommandType = CommandType.StoredProcedure;
cmdInforme.CommandText = "ListarInformesPorCliente";
SqlParameter myParam;
myParam = cmdInforme.Parameters.Add("@IdCliente",SqlDbType.Char,16);
myParam.Value = IdCliente;
SqlDataAdapter daInforme = new SqlDataAdapter(cmdInforme);
DataSet dsInforme = new DataSet();
daInforme.Fill(dsInforme,"Informes");
for (int i = 0; i<dsInforme.Tables["Informes"].Rows.Count; i++)
{
Informe cItem = new Informe();
cItem.IdInforme dsInforme.Tables["Informes"].Rows[i]["inf_IdInforme"].ToString();
cItem.FechaInforme System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
"].ToString());
arData.Add(cItem);
}
cmdInforme.Dispose();
daInforme.Dispose();
dsInforme.Dispose();
return arData;
}

Donde cItem.FechaInforme es del tipo DateTime. He solucionado esto por parte
del SQL donde pongo la opcion "ISNULL(FechaInforme,01/01/2000)", pero esto
solo me sirve para que no me de error, pero los datos no son buenos, ya que
se muestra 01/01/2000 cuando deberia mostrarse NADA. Alguna forma de
conseguir que un valor NULL no de error al asociarlo a una variable
DateTime?

Gracias!

Saludos
Oriol.

Preguntas similare

Leer las respuestas

#1 Jose Alfredo
19/08/2004 - 14:29 | Informe spam
Hola!

A lo que yo pienso, no se puede convertir a string un valor null y por eso
debe saltar un error en

cItem.FechaInforme >
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
pudieras testear primeramente si el valor es null y si es null, guardas una
cadena vacia...

Saludos

Jose Alfredo


"Oriol" <intranet[arroba]rvsa-itv.com> schrieb im Newsbeitrag
news:
Mostrar la cita
me
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
parte
Mostrar la cita
que
Mostrar la cita
#2 Oriol
19/08/2004 - 16:18 | Informe spam
Hola José,

El problema no creo que venga por aqui, porque por ejemplo tengo campos tipo
String con NULL, y si le aplico la funcion toString, no da problemas. El
problema creo que es en el System.DateTime.Parse. Aunque no estoy del todo
seguro y ahora mismo no puedo probarlo.

Gracias.

Saludos,
Oriol.

"Jose Alfredo" escribió en el mensaje
news:e$
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
una
Mostrar la cita
de
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
esto
Mostrar la cita
#3 Alejandro Perez
19/08/2004 - 18:24 | Informe spam
Hola Oriol. Realmente el problema si viene por alli como
te comento Jose.

La respuesta al porque si te sirve con un string y no con
el datetime es por lo siguiente:

El ToString() de un null retorna un string vacio. Si eso
se lo asignas a una variable string, no tienes ningun
problema. Es simplemente un string vacio "".

Pero, si a ese string vacio le intentas hacer un
DateTime.Parse, obtendras el error, porque un string "" no
es un datetime valido.

De esta manera, la solucion es la que te planteo Jose.
Evalua que el valor que te retorna el campo datetime no
sea "" para luego realizar el parse.

Bye bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela

Mostrar la cita
ejemplo tengo campos tipo
Mostrar la cita
da problemas. El
Mostrar la cita
no estoy del todo
Mostrar la cita
mensaje
Mostrar la cita
valor null y por eso
Mostrar la cita
["inf_FechaInforme
Mostrar la cita
es null, guardas
Mostrar la cita
Newsbeitrag
Mostrar la cita
encontrar la solucion.
Mostrar la cita
formato SmallDateTime.
Mostrar la cita
datos mediante un
Mostrar la cita
el Query Analizer),
Mostrar la cita
ponerlos en una variable
Mostrar la cita
en C# y Winforms)
Mostrar la cita
(string IdCliente)
Mostrar la cita
CommandType.StoredProcedure;
Mostrar la cita
= "ListarInformesPorCliente";
Mostrar la cita
("@IdCliente",SqlDbType.Char,16);
Mostrar la cita
(cmdInforme);
Mostrar la cita
["Informes"].Rows.Count; i++)
Mostrar la cita
["inf_IdInforme"].ToString();
Mostrar la cita
["inf_FechaInforme
Mostrar la cita
solucionado esto por
Mostrar la cita
(FechaInforme,01/01/2000)", pero
Mostrar la cita
no son buenos, ya
Mostrar la cita
Alguna forma de
Mostrar la cita
a una variable
Mostrar la cita
#4 Oriol
20/08/2004 - 11:42 | Informe spam
Hola Alejandro,

Gracias, creo que ahora he entendido bien el correo de Jose Alfredo.
El tema es que viendo mi codigo original, me quedaria hacer estas
modificaciones, no?

El codigo original:
cItem.FechaInforme System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
"].ToString());
tendria que ser asi:
if (dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme"] == null)
{cItem.FechaInforme System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
"]);}
else
{cItem.FechaInforme System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
"].ToString());}

Porque no hay otra forma de no tener que comprovar si es null, verdad? Y asi
no tener que hacer el IF en cada variable de tipo DateTime?

Gracias Alejandro/Jose Alfredo.

Saludos,
Oriol.

"Alejandro Perez" escribió en el mensaje
news:92c001c48608$f74e9840$
Hola Oriol. Realmente el problema si viene por alli como
te comento Jose.

La respuesta al porque si te sirve con un string y no con
el datetime es por lo siguiente:

El ToString() de un null retorna un string vacio. Si eso
se lo asignas a una variable string, no tienes ningun
problema. Es simplemente un string vacio "".

Pero, si a ese string vacio le intentas hacer un
DateTime.Parse, obtendras el error, porque un string "" no
es un datetime valido.

De esta manera, la solucion es la que te planteo Jose.
Evalua que el valor que te retorna el campo datetime no
sea "" para luego realizar el parse.

Bye bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela

Mostrar la cita
ejemplo tengo campos tipo
Mostrar la cita
da problemas. El
Mostrar la cita
no estoy del todo
Mostrar la cita
mensaje
Mostrar la cita
valor null y por eso
Mostrar la cita
["inf_FechaInforme
Mostrar la cita
es null, guardas
Mostrar la cita
Newsbeitrag
Mostrar la cita
encontrar la solucion.
Mostrar la cita
formato SmallDateTime.
Mostrar la cita
datos mediante un
Mostrar la cita
el Query Analizer),
Mostrar la cita
ponerlos en una variable
Mostrar la cita
en C# y Winforms)
Mostrar la cita
(string IdCliente)
Mostrar la cita
= "ListarInformesPorCliente";
Mostrar la cita
("@IdCliente",SqlDbType.Char,16);
Mostrar la cita
(cmdInforme);
Mostrar la cita
["Informes"].Rows.Count; i++)
Mostrar la cita
["inf_IdInforme"].ToString();
Mostrar la cita
["inf_FechaInforme
Mostrar la cita
solucionado esto por
Mostrar la cita
(FechaInforme,01/01/2000)", pero
Mostrar la cita
no son buenos, ya
Mostrar la cita
Alguna forma de
Mostrar la cita
a una variable
Mostrar la cita
#5 Oriol
20/08/2004 - 11:55 | Informe spam
Hola a todos de nuevo,

He probado lo de antes, pero ahora me encuentro con otro problema, esta vez
relacionado con el DateTimePicker.

this.dtpFechaNacimiento.Value System.DateTime.Parse(tra.FechaNacimiento.ToShortDateString());

Cuando se ejecuta este codigo, me da un error cuando tra.FechaNacimiento es
NULL.

El error es:
"Referencia a cadena no establecida como instancia de cadena. Nombre del
parametro: s"

Alguna forma de poner un NULL a un DateTimePicker. Porque si el valor es
null, no tiene porque salir ninguna fecha.

Gracias y saludos de nuevo.
Oriol.


"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:O%
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
System.DateTime.Parse(dsInforme.Tables["Informes"].Rows[i]["inf_FechaInforme
Mostrar la cita
asi
Mostrar la cita
Ads by Google
Search Busqueda sugerida