質問

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 あなたのためのもの。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top