外部表格与Excel 2007不在预期的格式OLEDB 12.0中

我开发了一个WEB API服务,当用户上传时,将从excel文件中读取数据。

我使用OLEDB如下:

if (Path.GetExtension(filePath).ToUpper() == ".XLS") { oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\""); } else { oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"); } oledbConn.Open(); //Exception thrown at here OleDbCommand cmd = new OleDbCommand(); OleDbDataAdapter oleda = new OleDbDataAdapter(); DataSet ds = new DataSet(); cmd.Connection = oledbConn; cmd.CommandText = "SELECT DISTINCT(["+mo_field+"]),["+model_field+"],["+content_filed+"] FROM ["+ecn_field+"] WHERE ["+mo_field+"] IS NOT NULL AND ["+active_field+"] ='1'"; oleda = new OleDbDataAdapter(cmd); oleda.Fill(ds,"NewMO"); 

但是抛出exception:

外部表格不是预期的格式

我的服务器安装了Windows Server 2012 RC2 64位,所以我已经尝试安装Microsoft数据库引擎2010重新分配32位/ 64位。 和Microsoft数据库引擎2007年32位。 但它仍然不起作用。 我search了3天,每个post都表示安装Microsoft数据库引擎将修复错误。 此代码适用于Office 2010/2013。

非常感谢你的帮助!

 var ds = new DataSet(); var da = new OleDbDataAdapter("SELECT DISTINCT(["+mo_field+"]),["+model_field+"],["+content_filed+"] FROM ["+ecn_field+"] WHERE ["+mo_field+"] IS NOT NULL AND ["+active_field+"] ='1'", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"); da.Fill(ds,"NewMO"); 

并确保该文件是一个真正的Excel文件,在Excel中打开它。

更新

这里有几个来自https://www.connectionstrings.com/excel/的连接string来尝试

 foreach (var cs in new string[] { "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES';", "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0; HDR = Yes; IMEX = 1';" }) try { using (var con = new System.Data.OleDb.OleDbConnection(cs)) con.Open(); MessageBox.Show(cs + " worked bro!!"); } catch { } foreach (var cs in new string[] { "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + filePath + ";", "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + filePath + ";", "Driver={Microsoft Excel Driver (*.xls)};Dbq=" + filePath + ";ReadOnly=0;"}) try { using (var con = new System.Data.Odbc.OdbcConnection(cs)) con.Open(); MessageBox.Show(cs + " worked bro!!"); } catch { }