Importar desde .dbf

04/11/2006 - 00:10 por Agustin | Informe spam
Hola, estoy haciendo un modulo de importación de datos de otras aplicaciones
que estan en el antiguo dbase(clipper) como puedo convertir las cadenas de
texto OEM a ANSI, pues me salen simbolos 'raros'.

Gracias
Agustin

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion [MVP]
04/11/2006 - 10:11 | Informe spam
"Agustin" wrote in message
news:OJMjC15$
Hola, estoy haciendo un modulo de importación de datos de otras
aplicaciones que estan en el antiguo dbase(clipper) como puedo convertir
las cadenas de texto OEM a ANSI, pues me salen simbolos 'raros'.



Usa System.Text.Encoding. Básicamente, quieres convertir del encoding
437 (OEM) al 1252 (Windows), o bien leer desde el 437 y dejar los resultados
en un String (Unicode):

using System.Text.Encoding;
...
Encoding codigoOEM = Encoding.GetEncoding(437);
byte[] bytesAConvertir = ...;
string TextoConvertido = codigoOEM.GetString(bytesAConvertir);

Observa que partimos de "bytesAConvertir" y no de un "stringAConvertir".
Si tuvieses ya los caracteres metidos en un string, entonces ya se ha
producido una conversión (mal hecha) desde los bytes que había en el dbf
hacia un string (que siempre contiene Unicode en .Net), con lo cual nos
encontramos con el problema de deshacer la conversión mal hecha para volver
a hacerla bien.
Respuesta Responder a este mensaje
#2 Agustin
04/11/2006 - 11:52 | Informe spam
Ok, pero no entiendo como lo hago desde una .dbf
tienes un ejemplo de importacion
Gracias
Agustin

"Alberto Poblacion [MVP]"
escribió en el mensaje news:OuQdsE$$
"Agustin" wrote in message
news:OJMjC15$
Hola, estoy haciendo un modulo de importación de datos de otras
aplicaciones que estan en el antiguo dbase(clipper) como puedo convertir
las cadenas de texto OEM a ANSI, pues me salen simbolos 'raros'.



Usa System.Text.Encoding. Básicamente, quieres convertir del encoding
437 (OEM) al 1252 (Windows), o bien leer desde el 437 y dejar los
resultados en un String (Unicode):

using System.Text.Encoding;
...
Encoding codigoOEM = Encoding.GetEncoding(437);
byte[] bytesAConvertir = ...;
string TextoConvertido = codigoOEM.GetString(bytesAConvertir);

Observa que partimos de "bytesAConvertir" y no de un "stringAConvertir".
Si tuvieses ya los caracteres metidos en un string, entonces ya se ha
producido una conversión (mal hecha) desde los bytes que había en el dbf
hacia un string (que siempre contiene Unicode en .Net), con lo cual nos
encontramos con el problema de deshacer la conversión mal hecha para
volver a hacerla bien.




Respuesta Responder a este mensaje
#3 Alberto Poblacion [MVP]
04/11/2006 - 12:17 | Informe spam
"Agustin" wrote in message
news:Ohahb9$$
Ok, pero no entiendo como lo hago desde una .dbf
tienes un ejemplo de importacion



Pues no, no tengo ningún ejemplo. La verdad es que nunca he importado
datos desde un dbf. Por lo que había entendido de la pregunta original, la
primera parte de la importación, que sería "extraer el contenido del dbf",
ya la tenías hecha. Y a continuación venía una segunda parte que era
"sustituir el juego de caracteres", que entendí que era la que no conocías y
que esa sí es la que sé hacer con System.Text.Encoding: Suponiendo que ya
tengas en un array de bytes los datos a convertir, con System.Text.Encoding
puedes interpretar esos bytes conforme con el juego de caracteres que sea
necesario. Pero la primera fase, "sacar los bytes del dbf" no la he hecho
nunca. Supongo que se podría hacer abriendo una conexión por OleDb, creando
un OleDbDataReader que recorra los registros, y sacando los bytes de los
campos con el método GetBytes del datareader. Pero nunca lo he probado.
Respuesta Responder a este mensaje
#4 Agustin
04/11/2006 - 16:20 | Informe spam
vale, ire investigando
Gracias
Agustin

"Alberto Poblacion [MVP]"
escribió en el mensaje news:
"Agustin" wrote in message
news:Ohahb9$$
Ok, pero no entiendo como lo hago desde una .dbf
tienes un ejemplo de importacion



Pues no, no tengo ningún ejemplo. La verdad es que nunca he importado
datos desde un dbf. Por lo que había entendido de la pregunta original, la
primera parte de la importación, que sería "extraer el contenido del dbf",
ya la tenías hecha. Y a continuación venía una segunda parte que era
"sustituir el juego de caracteres", que entendí que era la que no conocías
y que esa sí es la que sé hacer con System.Text.Encoding: Suponiendo que
ya tengas en un array de bytes los datos a convertir, con
System.Text.Encoding puedes interpretar esos bytes conforme con el juego
de caracteres que sea necesario. Pero la primera fase, "sacar los bytes
del dbf" no la he hecho nunca. Supongo que se podría hacer abriendo una
conexión por OleDb, creando un OleDbDataReader que recorra los registros,
y sacando los bytes de los campos con el método GetBytes del datareader.
Pero nunca lo he probado.


Respuesta Responder a este mensaje
#5 Paco Ferre
05/11/2006 - 07:46 | Informe spam
Hola,

No sé si tienes necesidad de importar cualquier DBF o un conjunto
reducido de ficheros, por ejemplo para una aplicación nueva que
sustituye a una anterior.

En el último caso (que me han tocado muchas importaciones gordas) es
más interesante usar las herramientas de importación de Access o SQL
Server para hacer el primer trabajo "sucio". Luego solo tienes que
desarrollar la importación a tu base de datos, hasta puedes crear
índices en la base de datos "sucia" para que todo vaya mucho más
rápido.

Por otro lado, pensaba que usando ADO.NET sobre el ODBC correspondiente
debería hacerte la "traducción" sin problema. Se supone que Access y
SQL Server usan lo mismo. Prueba a ver qué consiguen cuando le pides
que te importe un DBF.

Saludos,

Paco Ferre

Agustin ha escrito:

vale, ire investigando
Gracias
Agustin

"Alberto Poblacion [MVP]"
escribió en el mensaje news:
> "Agustin" wrote in message
> news:Ohahb9$$
>> Ok, pero no entiendo como lo hago desde una .dbf
>> tienes un ejemplo de importacion
>
> Pues no, no tengo ningún ejemplo. La verdad es que nunca he importado
> datos desde un dbf. Por lo que había entendido de la pregunta original, la
> primera parte de la importación, que sería "extraer el contenido del dbf",
> ya la tenías hecha. Y a continuación venía una segunda parte que era
> "sustituir el juego de caracteres", que entendí que era la que no conocías
> y que esa sí es la que sé hacer con System.Text.Encoding: Suponiendo que
> ya tengas en un array de bytes los datos a convertir, con
> System.Text.Encoding puedes interpretar esos bytes conforme con el juego
> de caracteres que sea necesario. Pero la primera fase, "sacar los bytes
> del dbf" no la he hecho nunca. Supongo que se podría hacer abriendo una
> conexión por OleDb, creando un OleDbDataReader que recorra los registros,
> y sacando los bytes de los campos con el método GetBytes del datareader.
> Pero nunca lo he probado.
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida