将CSV导入Web应用程序

时间:2013-11-14 12:55:25

标签: c# excel csv

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

上传方法如下 -

    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”不是有效路径,显然是因为它在Web服务器上不存在。

有没有人有尝试通过网络上传文件的经验,以及如何解决文件位置问题?

2 个答案:

答案 0 :(得分:0)

您可以使用Server.MapPath获取应用的虚拟位置。 Have a look at this article.

答案 1 :(得分:0)

您需要将FileUpload控件添加到Asp.Net页面。在按钮上单击,您需要通过调用:

来保存服务器上的文件
FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName);

之后你可以叫你处理文件的方法

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

所以我们的想法是在处理之前先将文件上传到服务器。

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