肯定需要进行版本的判断。
" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + " ;Extended Properties=Excel 8.0";这是03的

解决方案 »

  1.   

    是的,不同版本的Excel,连接字符串是不同的,需要判断。
      

  2.   

    ACE能否读取03版的EXcel?如果不能读取的话该怎么判断机器上装的是哪个版本,我刚才查了查资料,有些方法是通过读取注册表,但32位和64位操作系统的注册表是不同的,难道还需要再判断操作系统的版本?
      

  3.   

    或许能帮到你吧DataSet ds = null;                List<string> connStrs = new List<string>();
                    connStrs.Add("Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source = " + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1;\"");
                    connStrs.Add("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1;\"");
                    foreach (string connStr in connStrs)
                    {
                        ds = GetDataSet(connStr, sheetSet);
                        if (ds != null && ds.Tables[0].Rows.Count > 0) break;
                    }
                    return ds;
      

  4.   

    楼上正解 ace引擎直接就可以读取了 目前来说可以满足大多情况