Предыстория такова. Было приложение (на C#), работающее под Windows XP x86, которое производило чтение DBF файлов посредством ODBC провайдера следующим образом:
using System.Data.Odbc; ... OdbcConnection conn_ = new OdbcConnection(); conn_.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=NA;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"; conn_.Open(); OdbcCommand cmd_ = conn_.CreateCommand(); cmd_.CommandText = @"SELECT * FROM " + FullDbfFileName; ...
В последующем появилась потребность запускать это приложение под Windows 7 x64. И в этом случае код генерил следующую ошибку:
ERROR [IM002] [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
В общем, код потерял драйвер ODBC. После некоторых поисков в интернетах, вышел на статью Faruk Celik'a. Дело в том, что драйвер ODBC заточен под 32-х разрядные системы. Код по умолчанию запускался в семёрке как 64-х разрядный и окружение осуществляло поиск драйвера в 64-х разрядной среде ODBC. Просмотреть его можно, если зайти "Панель управления" - "Администрирование" - "Источник данных (ODBC)". Во вкладке "Драйверы" хотелось бы видеть строку Microsoft dBase Driver (*.dbf), но её там нет. И не будет... Она в другом месте, в источнике данных (ODBC) для 32-х разрядных систем, найти который можно здесь:
C:\Windows\SysWOW64\odbcad32.exe
Запускаем его и во вкладке "Драйверы" находим наш Microsoft dBase Driver (*.dbf).
Далее, во вкладке "Пользовательский DSN" создаём источник данных с именем "odbc32dbf" и драйвером Microsoft dBase Driver (*.dbf). В коде меняем строку подключения:
using System.Data.Odbc; ... OdbcConnection conn_ = new OdbcConnection(); conn_.ConnectionString = "Dsn=odbc32dbf"; conn_.Open(); ...
Также необходимо перекомпилировать проект как x86, чтобы при запуске он вертелся в необходимой нам 32-х разрядной среде. И тогда всё будет норм.
P.S. В написании статьи использовался SyntaxHighlighter 2.0 (подсветка синтаксиса программного кода в блоге)