Consultar archivo DBF con System.Data.Odbc.OdbcConnection cuando la ruta del archivo / Nombre dispone de espacio

StackOverflow https://stackoverflow.com/questions/3151073

  •  01-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de consultar un archivo DBF usando System.Data.Odbc.OdbcConnection. Funciona correctamente cuando el archivo no tiene un espacio en él, pero me sale el siguiente error "Error al abrir el archivo DBF: ERROR [42000] [Microsoft] [ODBC dBase Driver] Error de sintaxis en la cláusula" si la ruta del archivo o nombre tiene un espacio en él.

Estoy usando el siguiente código:

oConn = nuevo System.Data.Odbc.OdbcConnection (); oConn.ConnectionString = "Driver = {Microsoft dBase Driver (* .dbf)}; SourceType = DBF; SourceDB = NA; Exclusivo = n; Intercalar = Máquina; NULL = NO; DELETED = NO; BACKGROUNDFETCH = NO;";

oCmd.CommandText = "SELECT * FROM C: \ test 2 \ 12345678.dbf";

No está codificado-El texto del comando. Yo sólo incluía esa manera por simplicidad. La aplicación está configurado para permitir a un usuario seleccionar un archivo DBF y hacer que aparezca. No tiene control sobre donde los usuarios almacenan los archivos DBF y prefieren no tendría que tener a recordar no poner espacios en el nombre de archivo / ruta.

¿Cómo escapar del espacio en el nombre de archivo / ruta?

¿Fue útil?

Solución

probable que sea un problema relacionado con el "MS-DOS 8.3 Formato de nombre de archivo". Puede revisar los siguientes enlaces:

Otros consejos

Yo estaba corriendo en este tema también. Esta fue mi hit # 1 en Google, así que no tenía muchas esperanzas. Sin embargo, hemos sido capaces de conseguir el código para trabajar por cambiar el directorio actual al directorio problemática y luego con exclusión de la ruta en el CommandText:

//Save the current directory
string currentDir = System.IO.Directory.GetCurrentDirectory();

//Select the path that we need to use
System.IO.Directory.SetCurrentDirectory("C:\\test 2\\");

//Now the path isn't required:
oCmd.CommandText = @"SELECT * FROM 12345678.dbf";

//Restore the old directory
System.IO.Directory.SetCurrentDirectory(currentDir);

Usted sigue siendo limitado en lo que puede ser el nombre del archivo (sin espacios y <= 8 Char creo), pero eso es algo que se puede trabajar con ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top