Запрос файла DBF с System.Data.Odbc.OdbcConnection, когда путь / имя файла имеет место - PullRequest
4 голосов
/ 30 июня 2010

Я пытаюсь запросить файл DBF, используя System.Data.Odbc.OdbcConnection. Он работает правильно, когда в файле нет пробела, но я получаю следующую ошибку «Ошибка открытия файла DBF: ОШИБКА [42000] [Microsoft] [Драйвер ODBC dBase] Синтаксическая ошибка в предложении FROM», если путь к файлу или имя содержит пробел.

Я использую следующий код:

oConn = новый System.Data.Odbc.OdbcConnection (); oConn.ConnectionString = "Driver = {Microsoft dBase Driver (* .dbf)}; SourceType = DBF; SourceDB = NA; Исключительно = Нет; Разобрать = Машина; NULL = NO; УДАЛЕНО = NO; BACKGROUNDFETCH = NO;";

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

Текст команды не жестко запрограммирован. Я просто включил это так для простоты. Приложение настроено так, чтобы пользователь мог выбрать файл DBF и отобразить его. У меня нет контроля над тем, где пользователи хранят файлы DBF, и им не нужно, чтобы они помнили, чтобы не ставить пробелы в имени файла / пути.

Как мне избежать пробела в имени файла / пути?

Ответы [ 2 ]

3 голосов
/ 29 октября 2010

Я тоже столкнулся с этой проблемой. Это был мой хит № 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 символов), но я могу с этим работать

3 голосов
/ 30 июня 2010

Вероятно, это проблема, связанная с "форматом имени файла MS-DOS 8.3".Вы можете просмотреть следующие ссылки:

...