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
"].ToString());



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:
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.


Respuesta Responder a este mensaje
#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$
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
> "].ToString());

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:
> 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.
>
>


Respuesta Responder a este mensaje
#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

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$
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
> "].ToString());

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:
> 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.
>
>






.

Respuesta Responder a este mensaje
#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

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$
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
> "].ToString());

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:
> 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.
>
>






.

Respuesta Responder a este mensaje
#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%
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

>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$
>> 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
>> > "].ToString());
>>
>> 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:
>> > 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.
>> >
>> >
>>
>>
>
>
>.
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida