2009-07-17 5 views
0

私は単純なFileUploadコントロールを使用してExcelファイルを選択し、データを取り出してdbに保存します。ファイルを選択した後にアップロードしようとすると、このエラーが発生します。しかし、ファイルパスは正しいです。asp.netで無効なファイルパスエラー

"FilePath"は有効なパスではありません。パス名が正しく、あなたが使用したファイル が

コードを存在するサーバーに に接続されていること に綴られていること を確認してくださいすることです:

<add key="OleDbConnection" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= FilePath ;Extended Properties=&quot;Excel 8.0;HDR=Yes;IMEX=1&quot;"/> 

    string OleDbConnection = 
     ConfigurationManager.AppSettings["OleDbConnection"].Replace("FilePath", 
      fileUpload.PostedFile.FileName).Trim(); 

     Excel.ApplicationClass xlApp = new Excel.ApplicationClass(); 
     Excel.Workbooks xlWorkBooks = (Excel.Workbooks)xlApp.Workbooks; 
    Excel.Workbook wb = xlWorkBooks._Open(fileUpload.PostedFile.FileName, Type.Missing, false, Type.Missing, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, false, Type.Missing, true); 

     string strSheetName = ((Excel.Worksheet)wb.Sheets[1]).Name.ToString(); 
     xlWorkBooks.Close(); 
     xlApp.Quit(); 

     oledbCommand = new OleDbCommand(); 
     oledbAdapter = new OleDbDataAdapter(); 

     DataSet dsExcellData = new DataSet(); 
     oledbConnection = new OleDbConnection(OleDbConnection); 
     oledbConnection.Open(); 

     oledbCommand.Connection = oledbConnection; 
     oledbCommand.CommandText = "Select * from [" + strSheetName + "$]"; 

     oledbAdapter.SelectCommand = oledbCommand; 
     oledbAdapter.Fill(dsExcellData); 

     return dsExcellData; 
+1

。 – James

+0

また、AppSettings ["OleDbConnection"]プロパティの最後に.ToString()は必要ありません。常に値を文字列として返します。 – James

+0

OleDbConnectionの値はどのようなものですか? – mattruma

答えて

1

変更するには、相対パスを持っているPROB

string OleDbConnection = ConfigurationManager.AppSettings["OleDbConnection"].ToString().Replace("FilePath", Server.MapPath(fileUpload.PostedFile.FileName)).Trim(); 

へのライン、あなたはServer.MapPathの

との物理的なパスを必要とアイブ氏が正常にシートにクエリを実行し、次のコードを試してみてください上記のあなたのアイデアを使用してホストされた環境。あなたがブロック "を使って" 行方不明

private OleDbConnectionStringBuilder BuildXLConnString(string DSource) 
{ 
    OleDbConnectionStringBuilder connBuild = new OleDbConnectionStringBuilder(); 
    connBuild.Provider = "Microsoft.Jet.OLEDB.4.0"; 
    connBuild.DataSource = DSource; 
    connBuild.Add("Extended Properties", "Excel 8.0;IMEX=1;HDR=Yes;"); 
    return connBuild; 
} 
+0

私はこれを行うとき、私は "ファイルパス"が有効な仮想パスではありません。私が言うことを忘れたことは、ローカルマシンでVSから実行すると元のコードが正常に動作しますが、サーバーに公開して他のマシンにアクセスするときは正常に動作しません。 – blntechie

+0

ルーチンを試してみてください。 –

1

あなたはファイルパスをラップしようとしましたServer.MapPath(FileName)を使用していますか?

Reponse.Withページに接続文字列がどのように表示されますか。

0

:あなたはString.Formatのを使用しての代わりに、接続文字列に置き換えなければならない

var xlApp = new Excel.ApplicationClass(); 
var xlWorkBooks = (Excel.Workbooks) xlApp.Workbooks; 
Excel.Workbook wb = xlWorkBooks._Open(
    fileUpload.PostedFile.FileName, Type.Missing, false, 
    Type.Missing, "", "", true, Excel.XlPlatform.xlWindows, "\t", 
    true, false, Type.Missing, true); 

string strSheetName = 
    ((Excel.Worksheet) wb.Sheets[1]).Name.ToString(); 
xlWorkBooks.Close(); 
xlApp.Quit(); 

var dsExcellData = new DataSet(); 

var oleDbConnectionString = 
    ConfigurationManager.AppSettings["OleDbConnection"].Replace(
     "FilePath", fileUpload.PostedFile.FileName).Trim(); 
var commandText = "Select * from [" + strSheetName + "$]"; 
using (
    var oledbConnection = new OleDbConnection(oleDbConnectionString) 
    ) 
{ 
    oledbConnection.Open(); 
    using (var oledbCommand = new OleDbCommand()) 
    { 
     oledbCommand.Connection = oledbConnection; 
     oledbCommand.CommandText = commandText; 
     { 
      using (var oledbAdapter = new OleDbDataAdapter()) 
      { 
       oledbAdapter.SelectCommand = oledbCommand; 
       oledbAdapter.Fill(dsExcellData); 
       return dsExcellData; 
      } 
     } 
    } 
} 
+1

これは、彼がエラーである理由はありません...しかし、使用されたオブジェクトをリリースしていないので、コードの改善です! – James

関連する問題