Имя источника данных не найдено и драйвер по умолчанию не указан - PullRequest
9 голосов
/ 27 июня 2011

Меня попросили перенести приложение WinForms, которое использует шаблон MVP, на веб-страницу.Приложение, помимо прочего, загружает CSV-файл в DataTable, а затем выполняет некоторую работу.

CSV-файл загружен на сервер, а затем прочитан со следующим кодом

string connectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=C:\Temp\";

//check that file exists and in correct format
if (File.Exists(this.WorkingFileName))
{                    
    using (OdbcConnection connection = new OdbcConnection(connectionString))
    {
        // Determine number of rows
        string selectCount = "select count(*) from [MyFile.csv]");

        using (OdbcCommand command = new OdbcCommand(selectCount, connection))
        {
            connection.Open();
        }
    }
}

в этот момент я получаю сообщение об ошибке:

ОШИБКА [IM002] [Microsoft] [Диспетчер драйверов ODBC] Не найдено имя источника данных и не указан драйвер по умолчанию

Сейчаскод отлично работает в WinForms, но не работает в сети.Что-то, что мне нужно изменить в IIS, в моем конфигурационном файле или что-то еще, чтобы заставить этот код работать?Или есть что-то более фундаментальное, что мне нужно сделать?

Обновление

ОК, поэтому я выяснил, что отличалось между двумя моими версиями кода: версия WinForms работала как32-разрядный, как только я изменил его на 64-разрядный, он выдал ту же ошибку.См .: 32-разрядные текстовые драйверы (Microsoft Access, Microsoft Excel и текстовые файлы) из 64-разрядного приложения в Windows 7

Чтобы исправить положение, я установил 64-разрядные драйверы Access из http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255 но я все еще получаю ту же ошибку.

Если я проверяю своего администратора источника данных ODBC, я вижу «Текстовый драйвер Microsoft Access (* .txt, * .csv) | 14.00.47600.1000 | MicrosoftCorporation | ACEODBC.dll

Похоже, что они установлены нормально, так почему же это все равно не работает?

Ответы [ 3 ]

13 голосов
/ 28 июня 2011

ОК, я нашел проблему.Просто суммируем все части моего решения.

  1. Удалите все 32-разрядные приложения Office (требуется для шага 2)
  2. Установите 64-разрядные драйверы Access
  3. Переустановите все 32-разрядные приложения Office
  4. Измените строку подключения в ДВЕ местах, как видно здесь на:

    @ "Driver = {Текстовый драйвер Microsoft Access (* .txt, * .csv)}; Расширения = asc, csv, tab, txt; Сохранение информации о безопасности = False; Dbq = C: \ Temp \«

Обратите внимание:

  1. Имя драйвера изменено на Microsoft Access Текстовый драйвер
  2. Разделительпотому что расширения файлов были изменены с точки с запятой на запятую .

Я не заметил изменения запятой, которое причиняло мне много боли: - (

2 голосов
/ 27 июня 2011

Вероятно, это связано с тем, что на веб-сервере не установлена ​​библиотека Jet, которая, как мне кажется, предоставляет текстовый драйвер.Вероятно, он установлен локально из-за MS Office (опять же, я считаю, что это так)

0 голосов
/ 27 июня 2011

Правильно ли сформирована строка подключения?Кажется, что параметр dbq неверен.

"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=**C:Temp\\**"

Также взгляните на эту ссылку , которая предоставляет полезные примеры строки подключения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...