【问题标题】:ODBC Connection to Excel errorODBC 连接到 Excel 错误
【发布时间】:2015-10-04 22:26:40
【问题描述】:

我的 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;
}

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

ERROR [IM002] [Microsoft][ODBC Driver Manager] 数据源名称不正确 找到并且没有指定默认驱动程序”,这很奇怪,因为我有 在名为 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 服务器”
  • “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 并找到我清楚地看到的那些值时:

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

我是否遗漏了一些明显的东西?请帮帮我:)

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

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

con.ToString() 还提供以下信息:

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

【问题讨论】:

  • 我真的不明白为什么人们会殴打自己。使用microsoft.ace.oledb 使用 Excel
  • @T.S.谢谢你的主意。我一定会在某个时候尝试一下,但我仍然很好奇为什么这不起作用。
  • @AbyPhantom:正如 cmets 中的here 所指出的,您可能需要在 Office 位版本和用于修改 excel 文件的应用程序之间具有兼容性(我自己是个菜鸟对这些东西,所以这可能没有多大意义,但我有同样的错误)

标签: c# .net excel odbc


【解决方案1】:

使用OleDbConnection怎么样,首先要安装Microsoft Access Database Engine 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();

【讨论】:

    【解决方案2】:

    我看起来您的应用程序是 x86(32 位)应用程序,而您正在查看 64 位 ODBC 驱动程序。检查是否安装了 32bit ODBC 驱动......

    【讨论】:

      【解决方案3】:

      确保您已经下载并安装了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;";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        • 2017-08-20
        • 1970-01-01
        相关资源
        最近更新 更多