Pergunta

Estou tentando ler dados do arquivo do Excel no ASP.NET. Eu adicionei a string de conexão ao arquivo webconfig:

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

Mas isso me mostra uma errorMessage quando eu executo esta consulta:

string query = "selecione * de [io_definition $];

Io_definition é o nome da planilha no meu arquivo do Excel. Também adicionei o arquivo do Excel à pasta app_data do site.

O erro é:

O mecanismo de banco de dados do Microsoft Jet não conseguiu encontrar o objeto 'io_definition $'. Verifique se o objeto existe e se você soletra o nome e o nome do caminho corretamente.

O problema é que, quando escrevo o caminho absoluto do arquivo do Excel no Connectionstring, ele funciona. Existe alguma maneira de fazer funcionar sem escrever o caminho absoluto?

Obrigado,

Greg

Foi útil?

Solução

A questão aqui é que, para esse tipo de conexão de 'arquivo', o fornecedor OLEDB precisa, como você já encontrou, o caminho absoluto para o arquivo. Historicamente, nós fizemos isso com Server.MapPath, nesse caso, você faria algo como:

<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();
...

O que funciona, mas você precisa fazer tudo o que deseja abrir uma conexão e consultar os dados ou dividi -los em uma classe de fábrica de conexão.

Uma maneira mais intensa de fazer é a seguinte:

<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();
...

Em tempo de execução |DataDirectory| Token na conexão String atua como uma macro que silenciosamente faz tudo isso Server.MapPath coisas para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top