2010-06-30 24 views
4

J'essaie d'interroger un fichier DBF à l'aide de System.Data.Odbc.OdbcConnection. Cela fonctionne correctement lorsque le fichier n'a pas d'espace dedans, mais j'obtiens l'erreur suivante "Erreur lors de l'ouverture du fichier DBF: ERROR [42000] [Microsoft] [Pilote ODBC dBase] Erreur de syntaxe dans la clause FROM" si le chemin du fichier ou le nom a un espace dedans.Demande de fichier DBF avec System.Data.Odbc.OdbcConnection lorsque le chemin d'accès/le nom de fichier a de l'espace

J'utilise le code suivant:

oConn = new System.Data.Odbc.OdbcConnection(); oConn.ConnectionString = "Pilote = {Pilote Microsoft dBase (* .dbf)}; SourceType = DBF; SourceDB = NA; Exclusif = Non; Assemblage = Machine; NULL = NON; SUPPRIMÉ = NON; BACKGROUNDFETCH = NON;";

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

Le texte de la commande n'est pas codé en dur. Je l'ai juste inclus comme ça pour la simplicité. L'application est configurée pour permettre à un utilisateur de choisir un fichier DBF et de l'afficher. Je n'ai pas de contrôle sur l'endroit où les utilisateurs stockent les fichiers DBF et préfère ne pas avoir à les rappeler de ne pas mettre d'espaces dans le nom/chemin du fichier. Comment puis-je échapper l'espace dans le nom de fichier/chemin d'accès?

Répondre

3

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

+0

Doh, c'est tout à fait ça. Merci pour l'aide. – GnomeCubed

+0

Ugh, le lien Microsoft est évidemment mort maintenant. Microsoft est formidable pour réorganiser leurs URL et casser des choses. – BenCr

3

je courais sur cette question aussi bien. C'était mon hit # 1 dans Google, donc je n'étais 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 (pas espaces et < = 8 char je pense), mais c'est quelque chose que je peux travailler avec.

+0

Je ne suis pas en mesure de dicter comment les fichiers sont nommés et ils ont généralement plus de 8 caractères. Heureusement pour moi, les fichiers dbf que j'essaie de lire sont assez petits. (moins de 10 Mo). J'ai fini par copier le fichier dans un répertoire temp, quelque chose comme c: \ temp \ nospaces.dbf afin que je puisse garantir que je serais capable de le lire correctement. – GnomeCubed