ODBC连接到Excel错误

Aby*_*tom 11 .net c# excel odbc

我有一个ODBC连接的问题,该连接应该连接到Excel表并用它做一些事情.我已经在网上看了很多关于它的东西,但没有一个解决方案帮助了我(包括stackoverflow).

所以基本上我正处于试图打开表连接的地步.

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;
}
Run Code Online (Sandbox Code Playgroud)

当我调用该excel.Open()方法时,我收到OdbcException消息:

错误[IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序",这很奇怪,因为我在名为con的字符串中指定了那些.

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

还有一个奇怪的部分.当我调用我在stackoverflow上找到的以下方法时,它返回以下驱动程序列表:

  • "驱动程序da Microsoft para arquivos texto(*.txt;*.csv)"
  • "驱动程序执行Microsoft Access(*.mdb)"
  • "驱动程序执行Microsoft dBase(*.dbf)"
  • "驱动程序执行Microsoft Excel(*.xls)"
  • "驱动程序执行Microsoft Paradox(*.db)"
  • "Microsoft Access驱动程序(*.mdb)"
  • "Microsoft Access-Treiber(*.mdb)"
  • "Microsoft dBase驱动程序(*.dbf)"
  • "Microsoft dBase-Treiber(*.dbf)"
  • "Microsoft Excel驱动程序(*.xls)"
  • "Microsoft Excel-Treiber(*.xls)"
  • "Microsoft ODBC for Oracle"
  • "Microsoft Paradox驱动程序(*.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;
}
Run Code Online (Sandbox Code Playgroud)

应该注意的是,当我真正regedit去找那些值时,我清楚地看到:

"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)".
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 请帮我 :)

顺便说一句,我对.NET这方面很陌生,所以请保持你的答案愚蠢,这样我才能真正理解发生了什么.谢谢!

编辑:一位朋友指出我应该提供更多信息,所以这里是注册表,ODBC数据源管理员的屏幕截图以及ACEODBC.DLL实际存在于我的硬盘上的证明:

附加信息

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

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

Mic*_*ick 1

确保您已下载并安装Microsoft Access Database Engine 2010 Redistributable ....

并将您的连接字符串更改为...

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\POS\odabrane_skole novo_mod.xlsx;Extended Properties="Excel 12.0;HDR=YES; IMEX=1;";
Run Code Online (Sandbox Code Playgroud)