//从excel导入到数据库 
    protected void Import_Click(object sender, EventArgs e) 
    { 
        string filePath = ""; 
        string getErrMsg = ""; 
        DataSet excelDs = new DataSet(); 
        if (FileUpload1.PostedFile.FileName == "") 
        { 
            Response.Write("<script language=javascript>alert('请选择要上传的文件!');</script>"); 
            return;
        } 
        //从Excel读取数据 
        filePath = FileUpload1.PostedFile.FileName; 
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";Data Source=" + filePath; 
        OleDbConnection excelConn = new OleDbConnection(connString);
        OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", excelConn); 
        try 
        { 
            ExcelDA.Fill(excelDs, "users"); 
        } 
        catch (Exception err) 
        { 
            Response.Write(err.Message);
        } 
        finally 
        { 
            excelConn.Close(); 
            excelConn = null; 
        } 
        //将数据写入数据库 
        if (excelDs.Tables["0"].Rows.Count != 0
        { 
            string sql = "";
            string strConn = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString.ToString();
            SqlConnection sqlConn = new SqlConnection(strConn); 
            sqlConn.Open(); 
            SqlCommand myCommand = sqlConn.CreateCommand();
            SqlTransaction myTrans = sqlConn.BeginTransaction(); 
            myCommand.Transaction = myTrans; 
            try 
            { 
                for (int i = 0; i < excelDs.Tables[0].Rows.Count; i++) 
                { 
                    sql = "insert into users(userID, userName, address) values('" + excelDs.Tables[0].Rows[i]["ID"].ToString() + "','" + excelDs.Tables[0].Rows[i]["用户名"].ToString() + "','" + excelDs.Tables[0].Rows[i]["地址"].ToString() + "')"; 
                    myCommand.CommandText = sql; 
                    myCommand.ExecuteNonQuery(); 
                } myTrans.Commit(); } 
            catch (Exception ex) 
            { 
                getErrMsg = ex.Message.ToString();
                Response.Write(ex.Message.ToString()); 
                myTrans.Rollback(); 
            } 
            finally 
            { 
                sqlConn.Close(); 
                sqlConn = null;
            } 
        } 
        //返回提示信息 
        if (getErrMsg == "" || getErrMsg == null)
        { 
            Response.Write("<script language='Javascript'>alert('导入成功!')</script>");
            return; 
        } 
        else 
        { 
            Response.Write("<script language='Javascript'>alert('导入失败!')</script>");
            return; 
        } 
    } 
执行到红色脚本的时候报错:异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。
请问是什么原因啊?   谢谢

解决方案 »

  1.   

    这句写错了,应该是excelDs.Tables[0].Rows.Count != 0  的时候报System.IndexOutOfRangeException: 无法找到表 0
      

  2.   

     Response.Write(err.Message); 
     这里加一句
    Response.Flush();
    看看具体的错误.
    然后根据错误找原因.
      

  3.   

    加上Response.Fluse();之后提示:Microsoft Jet 数据库引擎找不到对象'C:\Documents and Settings\admin\ssss.xls'。请确定对象是否存在,并正确地写出它的名称和路径。
    但是ssss.xls确实是存在的啊
      

  4.   

    为什么filePath = FileUpload1.PostedFile.FileName;反回的路径是C:\Documents and Settings\admin\\ssss.xls 啊,文件名前面多了一个斜杠,这样肯定连不到excel啊,所以才会找不到表0.
      

  5.   

    奇怪了,要导入的EXCEL文件放到桌面上反回的路径就不对,不放到桌面上路径就没问题.
      

  6.   

    设个断点看下excelDs为不为空,如果为空了说明是EXCEL数据源连接错了,路径有问题,没找到数据源