строка подключения для чтения данных из excel в asp.net

Я пытаюсь прочитать данные из файла excel в asp.net. Я добавил строку подключения в файл webConfig:

<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HPM_DB.xls;Extended Properties=Excel 8.0"/>

Но он показывает мне сообщение об ошибке, когда я запускаю этот запрос:

string query = "Выберите * из [IO_Definition$]";

IO_Definition — это имя электронной таблицы в моем файле Excel. Я также добавил файл Excel в папку App_Data веб-сайта.

Ошибка:

Ядру базы данных Microsoft Jet не удалось найти объект «IO_Definition$». Убедитесь, что объект существует и что вы правильно написали его имя и путь.

Дело в том, что когда я пишу абсолютный путь к файлу excel в строке подключения, он работает. Могу ли я заставить его работать, не прописывая абсолютный путь?

Спасибо,

Грег


person Greg    schedule 18.05.2010    source источник


Ответы (1)


Проблема здесь в том, что для такого рода «файлового» соединения провайдеру OleDb нужен, как вы уже выяснили, абсолютный путь к файлу. Исторически мы делали это с Server.MapPath, и в этом случае вы должны были сделать что-то вроде:

<connectionstrings>
    <add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;"/>
</connectionstrings>

String connString;
OleDbConnection conn;

connString = Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString;
connString = connString + Server.MapPath("~/App_Data/HPM_DB.xls");

conn = new OleDbConnection(connString);

conn.Open();
...

который работает, но вам нужно либо делать все это каждый раз, когда вы хотите открыть соединение и запросить данные, либо разбить его на класс фабрики соединений.

Более аккуратный способ сделать это:

<connectionstrings>
    <add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;
    Data Source=|DataDirectory|\HPM_DB.xls;"/>
</connectionstrings>

OleDbConnection conn;

conn = new OleDbConnection(Web.Configuration.WebConfigurationManager.ConnectionStrings["xls"].ConnectionString);
conn.Open();
...

Во время выполнения токен |DataDirectory| в строке подключения действует как макрос, который молча делает все эти вещи Server.MapPath за вас.

person PhilPursglove    schedule 18.05.2010