1

我有一個ASP.NET web應用程序,它有一個fileupload控件,允許用戶上傳一個excel文件供其閱讀。閱讀通過FileUpload上傳的excel

我使用的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); 

回答

0

我懷疑這個問題的根源在調用Server.MapPath(fileupFile.FileName)FileName屬性是一個便利屬性,用於指示正​​在上載到服務器的內容的原始文件名。當(以及如果)將其保存在服務器上時,它不一定表示文件的位置或名稱。

看起來您仍然需要在服務器端接收文件並將其保存到磁盤。有幾種方法可以這樣做。 SaveAs()方法可能是最簡單的方法,但您也可以使用FileBytesFileContent屬性,它們分別允許您以字節數組或流的形式訪問上載的文件。

如果您第一次將文檔保存到您的硬盤驅動器,然後構建您的連接字符串,我相信這將解決問題。

下面是保存上傳文件的簡單示例。假設「〜/ 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"; 
// ... 

好運。

順便說一句,你可能已經知道,有在connectionstrings.com在Excel 2007中的連接字符串屬性一個很好的參考:http://connectionstrings.com/excel-2007

+0

謝謝!我通過取出目標文件路徑中的「〜/ Documents」並放入fileupFile.FileName來稍微調整它。 這就是它現在的樣子: var targetfilepath = Path.Combine(Server.MapPath(fileupFile.FileName)); – loreedee 2010-09-02 18:31:30