Interrogation fichier DBF avec System.Data.Odbc.OdbcConnection lorsque le chemin du fichier / nom possède un espace

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

  •  01-10-2019
  •  | 
  •  

Question

Je suis en train d'interroger un fichier DBF en utilisant System.Data.Odbc.OdbcConnection. Il fonctionne correctement lorsque le fichier ne dispose pas d'un espace, mais j'obtenir le « fichier DBF d'ouverture d'erreur: ERREUR [42000] [Microsoft] [ODBC dBase Driver] Erreur de syntaxe dans la clause FROM » erreur suivant si le chemin du fichier ou nom dispose d'un espace en elle.

J'utilise le code suivant:

oConn = new System.Data.Odbc.OdbcConnection (); oConn.ConnectionString = "Driver = {Microsoft dBase Driver (* .dbf)}; SourceType = DBF; SourceDB = NA; exclusif = Non, Collate = machine, NULL = NO; deleted = NO; BACKGROUNDFETCH = NO;";

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

Le texte de commande n'est pas codé en dur. Je l'ai juste inclus cette façon pour la simplicité. L'application est configuré pour permettre à un utilisateur de choisir un fichier DBF et avoir l'afficher. Je n'ai pas le contrôle sur l'endroit où les utilisateurs stockent les fichiers DBF et préférerais ne pas avoir à se rappeler de ne pas mettre d'espaces dans le nom de fichier / chemin.

Comment puis-je échapper l'espace dans le nom du fichier / chemin?

Était-ce utile?

La solution

il est probable un problème lié au "format nom de fichier MS-DOS 8.3". Vous pouvez consulter les liens suivants:

Autres conseils

Je courais sur cette question aussi bien. Ce fut mon succès # 1 dans Google, donc je ne suis pas très optimiste. Cependant, nous avons pu obtenir mon code pour en changeant le répertoire courant dans le répertoire problématique, puis hors du chemin dans le 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);

Vous êtes toujours limité dans ce que le nom du fichier peut être (sans espace et <= 8 car je pense), mais quelque chose que je puisse travailler avec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top