ODBC连接到Excel错误

我有一个应该连接到Excel表的ODBC连接的问题,并做它的东西。 我已经在网上阅读了很多关于它的东西,但没有一个解决scheme帮助我(包括计算器)。

所以基本上我正在尝试打开一个表的连接。

private static SortedList<string, School> generateSchoolListExcel(string listFilePath) { StringBuilder con = new StringBuilder(); OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Data Source", listFilePath); OdbcConnectionStringBuilder.AppendKeyValuePair(con, "HDR", "yes"); OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Format", "xlsx"); OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Driver", "{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"); //I have tried to specify driver without parentheses {} but it's still the same List<School> schoolList = new List<School>(); using (OdbcConnection excel = new OdbcConnection(con.ToString())) { excel.Open(); //doing actuall stuff } return schoolList; } 

当我调用excel.Open()方法时,我得到带有消息的OdbcException

错误[IM002] [微软] [ODBC驱动程序pipe理器]数据源名称未find,没有指定默认驱动程序“,这是奇怪的,因为我已经在名为con的string中指定的那些。

另外值得一提的是,在ODBC数据源pipe理器中,我可以清楚地看到,我已经安装并运行了这些驱动程序。

还有一个奇怪的部分。 当我调用下面的方法,我发现在stackoverflow它返回我下面的驱动程序列表:

  • “Driver da para paraququos texto(* .txt; * .csv)”
  • “驱动程序做Microsoft Access(* .mdb)”
  • “Driver do Microsoft dBase(* .dbf)”
  • “驱动程序做Microsoft Excel(* .xls)”
  • “司机做微软悖论(* .db)”
  • “Microsoft Access驱动程序(* .mdb)”
  • “Microsoft Access-Treiber(* .mdb)”
  • “Microsoft dBase驱动程序(* .dbf)”
  • “Microsoft dBase-Treiber(* .dbf)”
  • “Microsoft Excel驱动程序(* .xls)”
  • “Microsoft Excel-Treiber(* .xls)”
  • “用于Oracle的Microsoft ODBC”
  • “Microsoft悖论驱动程序(* .db)”
  • “Microsoft Paradox-Treiber(* .db)”
  • “Microsoft文本驱动程序( .txt; .csv)”
  • “Microsoft Text-Treiber(* .txt; * .csv)”
  • “SQL Server”
  • “SQL Server Native Client 11.0”

没有一个在其中有“* .xlsx”,这是我想要读取的文件格式。

方法如下:

 public static List<String> GetSystemDriverList() { List<string> names = new List<string>(); // get system dsn's Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software"); if (reg != null) { reg = reg.OpenSubKey("ODBC"); if (reg != null) { reg = reg.OpenSubKey("ODBCINST.INI"); if (reg != null) { reg = reg.OpenSubKey("ODBC Drivers"); if (reg != null) { // Get all DSN entries defined in DSN_LOC_IN_REGISTRY. foreach (string sName in reg.GetValueNames()) { names.Add(sName); } } try { reg.Close(); } catch { /* ignore this exception if we couldn't close */ } } } } return names; } 

应该指出的是,当我真的去了regedit并find这些值,我清楚地看到:

 "Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)". 

我错过了什么明显的? 请帮帮我 :)

顺便说一下,我对.NET的这个方面相当陌生,所以请保持你的答案,以便我真正理解正在发生的事情。 谢谢!

编辑:一位朋友指出,我应该给更多的信息,所以这里是registry编辑器,ODBC数据源pipe理员和ACEODBC.DLL实际上存在于我的硬盘驱动器的屏幕截图:

附加信息

con.ToString()给出了以下内容:

 Data Source="G:\POS\odabrane_skole novo_mod.xlsx";Driver="{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}" 

如何使用OleDbConnection,并且您必须首先安装Microsoft Access数据库引擎2010。

 string path = @"c:\sample.xlsx"; string strCon = " Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source = " + path + ";Extended Properties='Excel 12.0;'"; OleDbConnection objConn = new OleDbConnection(strCon); string strCom = " SELECT * FROM [a$] "; objConn.Open(); 

我看起来像你的应用程序是一个x86(32位)的应用程序,你正在寻找64位的ODBC驱动程序。 检查是否安装了32位ODBC驱动程序….

确保您已经下载并安装了Microsoft Access数据库引擎2010 Redistributable ….

并将您的连接string更改为…

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\POS\odabrane_skole novo_mod.xlsx;Extended Properties="Excel 12.0;HDR=YES; IMEX=1;";