首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将spreadsheetl文件从fileupload控件读取到filestream

问将spreadsheetl文件从fileupload控件读取到filestream
EN

Stack Overflow用户
提问于 2012-09-14 19:03:18
回答 1查看 4.2K关注 0票数 1

我正在尝试找到使用fileupload控件选择excel电子表格(xls和xlsx),然后使用filestream对象解析它,然后填充数据集的最佳方法。

这是我到目前为止完成工作的代码,但它的不同之处在于,我将excel电子表格保存到我的解决方案中的一个文件夹中,然后使用Microsoft ACE OLEDB连接查询数据。

代码语言:javascript
复制
protected void btnUpload_Click(object sender, EventArgs e)
    {
        string connectingString = "";
        if (ctrlFileUpload.HasFile)
        {
            string fileName =
                Path.GetFileName(ctrlFileUpload.PostedFile.FileName);

            string fileExtension =
                Path.GetExtension(ctrlFileUpload.PostedFile.FileName);
                //Path.GetExtension(ctrlFileUpload.PostedFile.ContentType);

            string fileLocation =
                Server.MapPath("~/App_Data/" + fileName);
            ctrlFileUpload.SaveAs(fileLocation);

            // Check whether file extension is xls or xslx
            if (fileExtension == ".xls")
            {
                connectingString =
                    "Provider=Microsoft.ACE.OLEDB.4.0;Data Source=" +
                    fileLocation + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=2\"";
            }

            else if (fileExtension == ".xlsx")
            {
                connectingString =
                    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                    fileLocation + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=2\"";
            }

            // Create OleDb Connection and OleD Command
            using (OleDbConnection con = new OleDbConnection(connectingString))
            {
                try
                {
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
                    //DataTable dtExcelRecords = new DataTable();
                    DataSet ds = new DataSet();
                    con.Open();
                    DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                    string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();
                    cmd.CommandText = "Select * FROM [" + getExcelSheetName + "]";
                    dAdapter.SelectCommand = cmd;
                    //dAdapter.Fill(dtExcelRecords);
                    dAdapter.Fill(ds);
                    //GridView1.DataSource = dtExcelRecords;
                    //GridView1.DataBind();
                }
                catch (Exception ex)
                {

                }
            }

        }
    }

总而言之,我希望读取电子表格中的数据,然后将其绑定到数据集,但不将文件保存到物理路径。

有没有一种更干净的方式来编写我遗漏的代码。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2012-09-14 19:10:10

我认为不把文件保存到你的服务器上是不可能获得数据的

如果你不能保存上传的文件,你怎么能给你的oleDbConnection字符串加上Data Source呢?

如果您不想保留文件,可以在执行完此文件后删除该文件。

你也可以这样引用https://stackoverflow.com/a/12420416/284240

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12423223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档