Строка подключения для чтения данных из Excel в asp.net - PullRequest
0 голосов
/ 18 мая 2010

Я пытаюсь прочитать данные из файла 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 в строке подключения, он работает. Можно ли как-нибудь заставить его работать без написания абсолютного пути?

Спасибо

Грег

1 Ответ

3 голосов
/ 18 мая 2010

Проблема здесь в том, что для такого типа файлового соединения провайдеру 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 вещи для вас.

...