OleDbDataReader

03/01/2008 - 13:26 por Rubén | Informe spam
Hola,

Esto es un problema grave, no se si os habrá ocurrido a alguno de vosotros.

A veces tengo el problema que la clase OleDbDataReader es inteligente y lo
único que hace es parecer inutil...

Veamos a ver si alguien encontró alguna solución o cual es la razón por la
que me da este fallo...

Tengo una columna en un archivo Excel de NIFs, hay NIFs españoles 000000000X
y número de identificación extranjeros ya pueden ser 12, o 89, o 17567 o
08786 vamos números sin letras.

Empezó a darme el error en un excel sin cabecera, me conectaba a el
diciendole en la opcion HDR que no tenía, y entonces conseguía leer solo los
números, con los NIFs españoles, me devolvía "" y no podía hacer un
GetString(0) porque saltaba la excepción de Cast no válido.

Ahora bien, pensé que era porque el amigo inteligente OleDbDataReader se los
tomaba todos como doubles, o enteros, así las strings no las, podía recoger,
no se porque... pues bien, añadí una cabecera, y con la opción de HDR = YES,
me seguía dando el error, y dije "Fijate seguro que se quia por la primera
fila, y con HDR yes la primera fila es un número.." pues puse HDR a NO y
luego probe a controlar que esa fila me la saltase.

Bien, aleluya pensé cuando me leía los números... está perfecto, hasta que
pasados 6 registros leyendo bien los números y pasandolos a String, no se
porque razón eñ valor que ahora devuelve con los números es DBNULL. y es
imposible hacerle un cast de cualquier tipo... ni tna siquiera acepta un
GetDouble(0) o cualquier otro Get numerico...

Me gustaría que alguien me aclarase cual es mi error, si hago alguno, o si
esto es cierto, no creo que sea problema de código, pero si no sabéis a que
se debe pedidmelo... lo procuraré colgar...

Gracias y Feliz Año Nuevo

Rubén

Preguntas similare

Leer las respuestas

#1 carlos.ruiz9
09/01/2008 - 10:47 | Informe spam
On 3 ene, 13:26, "Rubén" wrote:
Hola,

Esto es un problema grave, no se si os habrá ocurrido a alguno de vosotros.

A veces tengo el problema que la clase OleDbDataReader es inteligente y lo
único que hace es parecer inutil...

Veamos a ver si alguien encontró alguna solución o cual es la razón por la
que me da este fallo...

Tengo una columna en un archivo Excel de NIFs, hay NIFs españoles 000000000X
y número de identificación extranjeros ya pueden ser 12, o 89, o 17567 o
08786 vamos números sin letras.

Empezó a darme el error en un excel sin cabecera, me conectaba a el
diciendole en la opcion HDR que no tenía, y entonces conseguía leer solo los
números, con los NIFs españoles, me devolvía "" y no podía hacer un
GetString(0) porque saltaba la excepción de Cast no válido.

Ahora bien, pensé que era porque el amigo inteligente OleDbDataReader se los
tomaba todos como doubles, o enteros, así las strings no las, podía recoger,
no se porque... pues bien, añadí una cabecera, y con la opción de HDR = YES,
me seguía dando el error, y dije "Fijate seguro que se quia por la primera
fila, y con HDR yes la primera fila es un número.." pues puse HDR a NO y
luego probe a controlar que esa fila me la saltase.

Bien, aleluya pensé cuando me leía los números... está perfecto, hasta que
pasados 6 registros leyendo bien los números y pasandolos a String, no se
porque razón eñ valor que ahora devuelve con los números es DBNULL. y es
imposible hacerle un cast de cualquier tipo... ni tna siquiera acepta un
GetDouble(0) o cualquier otro Get numerico...

Me gustaría que alguien me aclarase cual es mi error, si hago alguno, o si
esto es cierto, no creo que sea problema de código, pero si no sabéis a que
se debe pedidmelo... lo procuraré colgar...

Gracias y Feliz Año Nuevo

Rubén



Hola Rubén,

Yo tengo el mismo problema y no sé a qué se debe. En mi caso, lo que
me lee son las cadenas de texto, mientras que los números devuelve
DBNull. He probado a poner explícitamente las celdas con formato de
texto y con formato de número (aunque tengan texto) y no se soluciona.
Por favor, si averiguas el motivo, te agradecería que lo publicaras.
Yo haré lo mismo si lo detecto.

En cuanto a controlar el DBNull, puedes hacerlo de la siguiente forma:

String nif = null;
Type tipoDatoNIF = dataReader["nif"].GetType();
if ( ( tipoDatoNIF != typeof( System.DBNull ) ) &&
( tipoDatoNIF == typeof( System.String ) ) )
{
nif = (String)dataReader["nif"];
}

donde dataReader es el resultado de la query y "nif" es el nombre de
la columna que estás leyendo. Por supuesto, puedes poner dataReader[0]
si no tienes cabeceras.

Un saludo,
Carlos Ruiz.
Respuesta Responder a este mensaje
#2 Rubén
09/01/2008 - 11:52 | Informe spam
Te respondo tambien por aquí por si alguien quiere verlo.

Lo que yo he hecho para solucionarlo es "sencillo".

- Le doy formato de texto a la columna, o celda
- Copio el valor numerico en un bloc de notas
- Copio ese valor del bloc de notas en la celda

Ahora aparece el triangulito verde que avisa de que el valor es un numero
transformado a texto, no como antes.

Gracias.


escribió en el mensaje
news:
On 3 ene, 13:26, "Rubén" wrote:
Hola,

Esto es un problema grave, no se si os habrá ocurrido a alguno de
vosotros.

A veces tengo el problema que la clase OleDbDataReader es inteligente y lo
único que hace es parecer inutil...

Veamos a ver si alguien encontró alguna solución o cual es la razón por la
que me da este fallo...

Tengo una columna en un archivo Excel de NIFs, hay NIFs españoles
000000000X
y número de identificación extranjeros ya pueden ser 12, o 89, o 17567 o
08786 vamos números sin letras.

Empezó a darme el error en un excel sin cabecera, me conectaba a el
diciendole en la opcion HDR que no tenía, y entonces conseguía leer solo
los
números, con los NIFs españoles, me devolvía "" y no podía hacer un
GetString(0) porque saltaba la excepción de Cast no válido.

Ahora bien, pensé que era porque el amigo inteligente OleDbDataReader se
los
tomaba todos como doubles, o enteros, así las strings no las, podía
recoger,
no se porque... pues bien, añadí una cabecera, y con la opción de HDR =
YES,
me seguía dando el error, y dije "Fijate seguro que se quia por la primera
fila, y con HDR yes la primera fila es un número.." pues puse HDR a NO y
luego probe a controlar que esa fila me la saltase.

Bien, aleluya pensé cuando me leía los números... está perfecto, hasta que
pasados 6 registros leyendo bien los números y pasandolos a String, no se
porque razón eñ valor que ahora devuelve con los números es DBNULL. y es
imposible hacerle un cast de cualquier tipo... ni tna siquiera acepta un
GetDouble(0) o cualquier otro Get numerico...

Me gustaría que alguien me aclarase cual es mi error, si hago alguno, o si
esto es cierto, no creo que sea problema de código, pero si no sabéis a
que
se debe pedidmelo... lo procuraré colgar...

Gracias y Feliz Año Nuevo

Rubén



Hola Rubén,

Yo tengo el mismo problema y no sé a qué se debe. En mi caso, lo que
me lee son las cadenas de texto, mientras que los números devuelve
DBNull. He probado a poner explícitamente las celdas con formato de
texto y con formato de número (aunque tengan texto) y no se soluciona.
Por favor, si averiguas el motivo, te agradecería que lo publicaras.
Yo haré lo mismo si lo detecto.

En cuanto a controlar el DBNull, puedes hacerlo de la siguiente forma:

String nif = null;
Type tipoDatoNIF = dataReader["nif"].GetType();
if ( ( tipoDatoNIF != typeof( System.DBNull ) ) &&
( tipoDatoNIF == typeof( System.String ) ) )
{
nif = (String)dataReader["nif"];
}

donde dataReader es el resultado de la query y "nif" es el nombre de
la columna que estás leyendo. Por supuesto, puedes poner dataReader[0]
si no tienes cabeceras.

Un saludo,
Carlos Ruiz.
Respuesta Responder a este mensaje
#3 Sashka
09/01/2008 - 16:42 | Informe spam
Lo que debes hacer es usar IMEX=1 en la cadena de conexión. Con ello se leen
los valores sin importar en tipo.

Sashka

escribió en el mensaje
news:
On 3 ene, 13:26, "Rubén" wrote:
Hola,

Esto es un problema grave, no se si os habrá ocurrido a alguno de
vosotros.

A veces tengo el problema que la clase OleDbDataReader es inteligente y lo
único que hace es parecer inutil...

Veamos a ver si alguien encontró alguna solución o cual es la razón por la
que me da este fallo...

Tengo una columna en un archivo Excel de NIFs, hay NIFs españoles
000000000X
y número de identificación extranjeros ya pueden ser 12, o 89, o 17567 o
08786 vamos números sin letras.

Empezó a darme el error en un excel sin cabecera, me conectaba a el
diciendole en la opcion HDR que no tenía, y entonces conseguía leer solo
los
números, con los NIFs españoles, me devolvía "" y no podía hacer un
GetString(0) porque saltaba la excepción de Cast no válido.

Ahora bien, pensé que era porque el amigo inteligente OleDbDataReader se
los
tomaba todos como doubles, o enteros, así las strings no las, podía
recoger,
no se porque... pues bien, añadí una cabecera, y con la opción de HDR =
YES,
me seguía dando el error, y dije "Fijate seguro que se quia por la primera
fila, y con HDR yes la primera fila es un número.." pues puse HDR a NO y
luego probe a controlar que esa fila me la saltase.

Bien, aleluya pensé cuando me leía los números... está perfecto, hasta que
pasados 6 registros leyendo bien los números y pasandolos a String, no se
porque razón eñ valor que ahora devuelve con los números es DBNULL. y es
imposible hacerle un cast de cualquier tipo... ni tna siquiera acepta un
GetDouble(0) o cualquier otro Get numerico...

Me gustaría que alguien me aclarase cual es mi error, si hago alguno, o si
esto es cierto, no creo que sea problema de código, pero si no sabéis a
que
se debe pedidmelo... lo procuraré colgar...

Gracias y Feliz Año Nuevo

Rubén



Hola Rubén,

Yo tengo el mismo problema y no sé a qué se debe. En mi caso, lo que
me lee son las cadenas de texto, mientras que los números devuelve
DBNull. He probado a poner explícitamente las celdas con formato de
texto y con formato de número (aunque tengan texto) y no se soluciona.
Por favor, si averiguas el motivo, te agradecería que lo publicaras.
Yo haré lo mismo si lo detecto.

En cuanto a controlar el DBNull, puedes hacerlo de la siguiente forma:

String nif = null;
Type tipoDatoNIF = dataReader["nif"].GetType();
if ( ( tipoDatoNIF != typeof( System.DBNull ) ) &&
( tipoDatoNIF == typeof( System.String ) ) )
{
nif = (String)dataReader["nif"];
}

donde dataReader es el resultado de la query y "nif" es el nombre de
la columna que estás leyendo. Por supuesto, puedes poner dataReader[0]
si no tienes cabeceras.

Un saludo,
Carlos Ruiz.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida