ASP.NETのExcelの接続文字列読み取りデータ
-
27-09-2019 - |
質問
ASP.NETのExcelファイルからデータを読み込もうとしています。 webconfigファイルに接続文字列を追加しました:
<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HPM_DB.xls;Extended Properties=Excel 8.0"/>
しかし、このクエリを実行すると、それは私に誤りを示しています:
文字列query = "select * from [io_definition $];
IO_Definitionは、Excelファイルのスプレッドシートの名前です。また、Webサイトのapp_dataフォルダーにExcelファイルを追加しました。
エラーは次のとおりです。
Microsoft Jetデータベースエンジンは、オブジェクト「IO_Definition $」を見つけることができませんでした。オブジェクトが存在し、その名前とパス名を正しく綴ることを確認してください。
問題は、接続ストリングでExcelファイルの絶対パスを書くと、機能するということです。とにかく、絶対的な道を書くことなく機能させることができますか?
ありがとう、
グレッグ
解決
ここでの問題は、この種の「ファイル」接続には、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
あなたのためのもの。
所属していません StackOverflow