Запрос файла DBF с System.data.odbc.odbcconnection, когда путь к файлу / имя имеет место
-
01-10-2019 - |
Вопрос
Я пытаюсь запрашивать файл DBF с помощью System.data.odbc.odbccondection. Он работает правильно, когда файл не имеет в нем пространства, но я получаю следующую ошибку «Ошибка открытия DBF файл: ошибка [42000] [Microsoft] [DBASE DBASE] [DBASE] [ODBC DBASE] Синтаксис ошибки в разделе« Если путь файла или Имя имеет место в нем.
Я использую следующий код:
oconn = новая система .data.odbc.odbcconnection (); Oconn.ConnectionStringString = "Driver = {драйвер Microsoft DBASE (* .dbf)}; sourcetype = dbf; sourcedb = na; Exclusive = no; collate = machine; null = no; удален = нет; backgroundfetch = no;";
ocmd.commandtext = "Выберите * от C: Test 2 12345678.dbf";
Текст команды не жестко закодирован. Я только что включил это так для простоты. Приложение является установкой, чтобы позволить пользователю выбрать файл DBF и его отображать его. У меня нет контроля, где пользователи хранят файлы DBF и предпочли бы, чтобы они не помнили, чтобы не ставить пробелы в имени / путь к файлу.
Как я могу избежать места в файле имени / путь?
Решение
Вероятно, это проблема, связанная с «форматом имени файла MS-DOS 8.3». Вы можете просмотреть следующие ссылки:
- Поддержка Microsoft: вы получаете сообщение об ошибке при импорте файла dbase, foxpro или paradox
- Википедия: 8.3 filename (Здесь он говорит, что пространство было запрещено конвенцией)
Другие советы
Я также бегал в этот вопрос. Это был мой # 1 попал в Google, поэтому я не очень надеюсь. Тем не менее, мы смогли получить свой код работать, изменив текущий каталог в проблемный каталог, а затем исключая путь в 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);
Вы все еще ограничены в том, что может быть название файла (без пробелов и <= 8 CHAR, я думаю), но это то, с чем я могу работать.