1

ユーザーがExcelファイルをアップロードして読み取ることができるfileuploadコントロールを備えたASP.NETWebアプリケーションがあります。

OleDBConnectionを使用していますが、アプリがOleDBExceptionsをスローし続けるため、接続文字列またはクエリ文字列が間違っているように感じます(痛い!)。アップロードされたファイルを保存またはアクセスするための良い方法は何でしょうか?

接続文字列は次のとおりです。

olcon.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileupFile.FileName) + ";Extended Properties=Excel 12.0";

クエリ文字列:

OleDbCommand olcmd = new OleDbCommand("SELECT * FROM [Sheet1$]", olcon);
4

1 に答える 1

0

この問題は、への呼び出しに起因していると思われServer.MapPath(fileupFile.FileName)ます。このFileNameプロパティは、サーバーにアップロードされているコンテンツの元のファイル名を示す便利なプロパティです。サーバーに保存するとき(および保存する場合)に、ファイルの場所や名前を必ずしも示す必要はありません。

サーバー側でファイルを受信して​​ディスクに保存する必要があるようです。これを行うにはいくつかの方法があります。このSaveAs()方法はおそらく最も簡単ですが、アップロードされたファイルにそれぞれバイト配列またはストリームとしてアクセスできるプロパティFileBytesとプロパティもあります。FileContent

最初にドキュメントをハードドライブに保存してから接続文字列を作成すると、問題が解決すると思います。

アップロードしたファイルを保存する簡単な例を次に示します。「〜/ Documents」フォルダーがIISワーカープロセスに書き込みアクセス許可を付与している(または偽装を使用し、認証されたユーザーが書き込みアクセス許可を持っている)と想定します。

var targetfilepath = Path.Combine(Server.MapPath(~/Documents), fileupFile.FileName);
fileupFile.SaveAs(targetfilepath);

var connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetfilepath + ";Extended Properties=Excel 12.0";
// ...

幸運を。

ちなみに、すでにご存知かもしれませんが、Excel 2007の接続文字列のプロパティに関する優れたリファレンスがconnectionstrings.comにあります:http://connectionstrings.com/excel-2007

于 2010-09-01T23:15:58.117 に答える