本帖最后由 noliner 于 2015-01-10 23:28:16 编辑

解决方案 »

  1.   

    Provider指定的数据驱动版本太低吧才4.0后面的excel是8.0。
      

  2.   


    断点运行到这步:oleDBConn = new OleDbConnection(oleDBConnString);
      

  3.   


    完整代码是这样的:
    public DataTable LendInDT(string strFilePath)
        {
            if (strFilePath == null)
            {
                throw new ArgumentNullException("filename string is null!");
            }        if (strFilePath.Length == 0)
            {
                throw new ArgumentException("filename string is empty!");
            }        string oleDBConnString = String.Empty;
            oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
            oleDBConnString += "Data Source=";
            oleDBConnString += strFilePath;
            oleDBConnString += ";Extended Properties=Excel 8.0;";
            OleDbConnection oleDBConn = null;
            OleDbDataAdapter da = null;
            DataTable m_tableName = new DataTable(); ;
            DataSet ds = new DataSet();
            oleDBConn = new OleDbConnection(oleDBConnString);
            oleDBConn.Open();
            m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);        if (m_tableName != null && m_tableName.Rows.Count > 0)
            {            m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString();        }
            string sqlMaster = " SELECT * FROM [" + m_tableName + "]";
            da = new OleDbDataAdapter(sqlMaster, oleDBConn);
            try
            {
                da.Fill(ds, "tb");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                oleDBConn.Close();
                oleDBConn.Dispose();
                da.Dispose();
            }
            DataTable result = ds.Tables["tb"];
            return result;    }
      

  4.   

    ServerVersion “oleDBConn.ServerVersion”引发了“System.InvalidOperationException”类型的异常
    是什么原因啊?
      

  5.   

    Microsoft.Jet.OLEDB.4.0、Extended Properties=Excel 8.0,对应excel2003
    如果你机器装的是office2003以上版本,相应的调整上面两个值。
      

  6.   

    你好,我前段时间也遇到过类似的问题。
    后来使用了aspose.cells.dll
    try
    {
        ds = Report.GetDataTableFromExecl(phisicalFilePath);
    }
    catch (Exception ex)
    {
        ShowMessage(Page, "上传失败,请稍后重试!" + ex.Message);
        return;
    }public static DataSet GetDataTableFromExecl(string filePath)
    {
        var dsExcel = new DataSet();    var wkBook = new Workbook(filePath);
        // 只取第一个sheet
        var wkSheet = wkBook.Worksheets[0];    var dtTemp = new DataTable();
        for (var x = 0; x < wkSheet.Cells.MaxDataRow + 1; x++)
        {
            DataRow dRow = null;        for (var y = 0; y < wkSheet.Cells.MaxDataColumn + 1; y++)
            {
                var value = wkSheet.Cells[x, y].StringValue.Trim();            // 如果是第一行,则当作表头
                if (x == 0)
                {
                    // 设置表头
                    var dCol = new DataColumn(value);
                    dtTemp.Columns.Add(dCol);
                }
                //非第一行,则为数据行
                else
                {
                    //每次循环到第一列时,实例DataRow
                    if (y == 0)
                    {
                        dRow = dtTemp.NewRow();
                    }
                    //给第Y列赋值
                    if (string.IsNullOrEmpty(value))
                    {
                        dRow[y] = null;
                    }
                    else
                    {
                        dRow[y] = value;
                    }
                }
            }        if (dRow != null)
            {
                dtTemp.Rows.Add(dRow);
            }
        }
        dsExcel.Tables.Add(dtTemp);    return dsExcel;
    }