将CSV导入到Web应用程序中

我有一个过程,允许用户下载电子表格,进行一些更改,然后上传这些更改。

上传方法看起来像 –

public DataTable ImportXLS(String SourceFilePath) { string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + SourceFilePath + ";" + "Extended Properties=Excel 8.0;"; using (OleDbConnection cn = new OleDbConnection(ConnectionString)) { cn.Open(); DataTable dbSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dbSchema == null || dbSchema.Rows.Count < 1) { throw new Exception("Error: Could not determine the name of the first worksheet."); } string WorkSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString(); OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + WorkSheetName + "]", cn); DataTable dt = new DataTable(WorkSheetName); da.Fill(dt); return dt; } } 

当我在本地调用方法时,它可以工作,因为我可以看到我的本地驱动器。

当部署到Web服务器,并调用像 –

 ExportImport _ei = new ExportImport(); DataTable dt = null; dt = _ei.ImportXLS("C:\Users\mike\Desktop\mike.xls"); 

我得到一个错误,“C:\ Users \ mike \ Desktop \ mike.xls”不是一个有效的path,显然是因为它不存在于Web服务器上。

有没有人有任何尝试通过networking上传文件的经验,你如何解决文件位置问题?

您需要将一个FileUpload控件添加到您的Asp.Net页面。 在一个button上单击,您需要通过调用以下命令将该文件保存在服务器上:

 FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName); 

之后,您可以调用您的方法来处理文件

 ExportImport _ei = new ExportImport(); DataTable dt = null; dt = _ei.ImportXLS("C:\\Uploads\\" + FileUpload1.FileName); 

所以这个想法是在处理之前先把file upload到服务器。

使用FileUpload控件(.Net 2.0)的链接
http://msdn.microsoft.com/en-us/library/aa479405.aspx

您可以使用Server.MapPath来获取您的应用程序的虚拟位置。 看看这篇文章。