Dados de leitura da string de conexão do Excel no ASP.NET
-
27-09-2019 - |
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
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ê.