我在做Execl数据导入数据库表中,要求是先把上传的数据预览一遍,,我的做法是,先把Execl数据绑定到Gridview中,如果没有问题的话,点确定导入按钮,把数据插入到表中,代码如下:
protected void Button1_Click(object sender, EventArgs e)
    {
        GridView1.DataSource = CreateExeclDataSource();
        GridView1.DataBind();
    }
  
   
    private System.Data.DataSet CreateExeclDataSource()
    {
        HttpPostedFile hpf = FileUpload2.PostedFile;
        FileInfo FI = new FileInfo(FileUpload2.PostedFile.FileName);
        String FirstName = FI.FullName;
        string txtPath = Path.GetFileName(hpf.FileName);        hpf.SaveAs(Server.MapPath("~/cmsadmin\\" + Path.GetFileName(txtPath)));
        
        string strConn;
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(txtPath)+ ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
        OleDbConnection conn = new OleDbConnection(strConn);
        OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
        DataSet ds = new DataSet();
        oada.Fill(ds);
          
        ds.Dispose();
        return ds;    }这代码把execl数据绑定到GridView1,
点确定导入按钮代码是  string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileUpload2.PostedFile.FileName) + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
            OleDbConnection conn = new OleDbConnection(strConn);
            OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
            DataSet ds = new DataSet();
            oada.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    CMMember cmmember = new CMMember();
                    cmmember.Salutation = dr["Salutation"].ToString();
                    cmmember.Firstname = dr["First name"].ToString();
                    cmmember.Lastname = dr["Last name"].ToString();
                    cmmember.Company = dr["Company Name"].ToString(); ;
                    cmmember.Address = dr["Address"].ToString();
                    cmmember.City = dr["City"].ToString();
                    cmmember.Country = dr["Country"].ToString();
                    cmmember.Tel = dr["Tel"].ToString();
                    cmmember.Did = dr["DID"].ToString();
                    cmmember.Fax = dr["Fax"].ToString();
                    cmmember.Mobile = dr["Mobile"].ToString();
                    cmmember.Email = dr["Email"].ToString();
                    CMHotelCollection Ohotel = new CMHotelCollection();
                    Ohotel.ListAll();
                    ArrayList Hotellist = Ohotel.List;
                    for (int i = 0; i < Hotellist.Count; i++)
                    {
                        if (dr["Hotel"].ToString() == (((CMHotel)Hotellist[i]).Name))
                        {
                            cmmember.Hotel = ((CMHotel)Hotellist[i]).Sid + ",";                            String[] arr = dr["ed+m options"].ToString().Split(',');
                            for (int k = 0; k < arr.Length; k++)
                            {
                                cmmember.Outlet = cmmember.Outlet + arr[k].ToString() + ",";
                                Response.Write(arr[k].ToString() + ",");
                            }
                        }
                    }                    cmmember.Create();
报的错误是:No error message available, result code: E_FAIL(0x80004005). 我搞不定这个错误,大家帮忙看看,或许是我点确定导入按钮中的代码错了啊,求解答案

解决方案 »

  1.   

    你试试单步调试一下,把具体哪里exception的地方找到。
      

  2.   

    hpf.SaveAs(Server.MapPath("~/cmsadmin\\" + Path.GetFileName(txtPath)));
            
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(txtPath)+ ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
            =》
    string filePath=Server.MapPath("~/cmsadmin\\" + Path.GetFileName(txtPath));
    hpf.SaveAs(filePath);
            
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath+ ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
            
      

  3.   

    还是报错啊,No error message available, result code: E_FAIL(0x80004005). 
      

  4.   

    你断点跟一下,看看是哪里错了加个try catch
      

  5.   

    加try,catch 错误都隐藏了,看不出来啊,自己顶一下