为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?

Posted

技术标签:

【中文标题】为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?【英文标题】:Why am I getting "Data source name not found and no default driver specified" and how do I fix it?为什么我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决? 【发布时间】:2019-10-26 14:37:10 【问题描述】:

当试图在 Windows 上创建一个通过 ODBC 连接到数据库的程序时,我收到以下错误:

[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序。

我确定我的代码是正确的。它甚至可以在不同的 PC 上运行。

为什么会出现此错误?我该如何解决?

【问题讨论】:

【参考方案1】:

是什么导致了这个错误?

简单地说,错误消息告诉您,ODBC 驱动程序管理器找不到您在连接字符串或 DSN 中指定的驱动程序。

这可能有 3 个常见原因:

    您尝试使用的驱动程序未安装在您的系统上 驱动程序已安装,但它与您正在运行的代码的位数不匹配 您在输入驱动程序名称时出错

如何检查我的系统上安装了哪些驱动程序?

您可以通过 ODBC 数据源管理器检查系统上安装的驱动程序。要打开它,请按 ⊞ Win + R,然后输入:odbcad32.exe。然后检查标签 Drivers 以获取已安装的驱动程序。 Name 列指示您应该在连接字符串或 DSN 中使用的确切名称。

如果您使用的是 64 位 Windows,则只会列出安装在 Windows 上的 64 位驱动程序 你的系统。要查看安装了哪些 32 位驱动程序,请按 ⊞ Win + R,然后输入:C:\Windows\SysWOW64\odbcad32.exe,然后转到 Drivers 再次选项卡。

驱动安装了,但可能是位错误,怎么办?

然后,您有两个选择,要么调整程序运行的位数,要么安装具有不同位数的驱动程序。

Windows 上默认安装的一些驱动程序只有 32 位版本。这些不能用于 64 位程序。

您通常可以在任务管理器中识别程序正在运行的位数。在 Windows 10 中,所有 32 位程序的名称都附加了(32 位)。如果不存在,您可能正在运行 64 位程序,并且大多数现代编程语言和环境默认在 64 位上运行,但允许您切换到 32 位。但是,不同编程语言的细节超出了这个问题的范围。

如何验证我没有输入错误的驱动程序名称?

ODBC 连接字符串如下所示:

DRIVER=DriverName;ParameterName1=ParameterValue1;ParameterNameN=ParameterValueN;

如果驱动程序名称部分可能包含特殊字符,则需要用大括号分隔,并且需要与已安装的驱动程序名称完全匹配,如 ODBC 数据源管理器中所示,包括空格和印刷字符,但不包括大写字母。

请注意,对于已部署的代码,驱动程序必须存在于运行代码的计算机/服务器上。

我没有驱动程序,或者位数不对,我在哪里可以找到正确的驱动程序?

这取决于您要使用的驱动程序。

带有下载位置的常用驱动程序列表(所有 32 位和 64 位都在同一个 URL):

Microsoft ODBC Driver 17 for SQL Server Microsoft Access 数据库驱动程序,它是Microsoft Access Database Engine 的一部分。请注意,不支持同时安装 32 位和 64 位 Access ODBC 驱动程序。 Oracle 的mysql ODBC connector Christian Werner(非官方)的开源 SQLite ODBC driver psqlODBC,PostgreSQL 官方驱动

如果您要使用的驱动程序未列出,则通常使用 Google 很容易找到该位置。

【讨论】:

以上是关于为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?

为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?

为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?

为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?

为啥我会收到 ConcurrentModificationException?

为啥我会收到 CancelledKeyException?