Вопрос

Я пытаюсь прочитать данные из файла 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 Database не удалось найти объект 'io_definition $'. Убедитесь, что объект существует, и что вы пишете его имя и имя пути правильно.

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

Спасибо,

Грег

Это было полезно?

Решение

Выпуск вот это то, что для этого своего рода «файловое» подключение необходимо, поставщику поставщика 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();
...

Что работает, но вам нужно либо сделать все, что каждый раз, когда вы хотите открыть соединение и запрашивать данные или разбить его в Connection Factory Class.

Способ сделать это:

<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 Вещи для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top