Postgresql odbc driver error c# [IM002] [Microsoft][ODBC Driver Manager] Data source name not found

Posted

技术标签:

【中文标题】Postgresql odbc driver error c# [IM002] [Microsoft][ODBC Driver Manager] Data source name not found【英文标题】: 【发布时间】:2016-04-19 10:52:50 【问题描述】:

我正在设置一个与数据库无关的数据库应用程序,当使用 postgresql 进行测试时,我得到了标准的 dsn 错误:

[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称

我通常使用 SQL server 和 mysql,所以我是 postgres 的新手,我尝试了标准推荐的连接字符串:

"Driver = PostgreSQL; Server = localhost; Database = postgres; Port = 5432; Uid = postgres; Pwd = XXXXXX;"

我也试过安装postrgesql后安装的odbc驱动的名字:

"Driver = PostgreSQL ODBC Driver(UNICODE); Server = localhost; Database = postgres; Port = 5432; Uid = postgres; Pwd = XXXXXX;"

在 odbc 管理器中设置 DSN 也可以完美地使用 unicode 驱动程序,所以我不明白为什么我无法在我的应用程序中连接,我在连接字符串中使用的驱动程序名称是否有错误?

【问题讨论】:

【参考方案1】:

您的错误信息看起来很奇怪。它告诉 DSN 未找到。你确定你用Driver=...的连接字符串吗?

您可以以多种形式使用 ODBC 连接字符串。一开始你已经创建了DSN,所以你可以使用它:

DSN=mn_test; Uid=postgres; Pwd=postgres;

那么你可以使用其他形式的连接字符串:

Driver=PostgreSQL UNICODE;Server=127.0.0.1; Port=5493; Database=mn_test; Uid=postgres; Pwd=postgres;

两者都适用于我的旧 32 位 Windows 环境。我用简单的 Python 脚本测试它们(我使用 ActiveState Python,其中有简单的odbc 模块):

import odbc

def test_odbc(connect_string):
    print(connect_string)
    db = odbc.odbc(connect_string)
    c = db.cursor()
    rs = c.execute("SELECT version()")
    for txt in c.fetchall():
        print('%s' % (txt[0]))
    print('-----')

test_odbc('Driver=PostgreSQL UNICODE;Server=127.0.0.1; Port=5493; Database=mn_test; Uid=postgres; Pwd=postgres;')
test_odbc('DSN=mn_test; Uid=postgres; Pwd=postgres;')

【讨论】:

它现在可以工作了,重新启动后,我从注册表中复制了驱动程序名称字母,我使用的是其他网站上建议的驱动程序名称后缀(x64),但实际上这个postgresql 软件包附带的标准 odbc 驱动程序不需要安装,这可能是导致我的问题的原因,也仅将驱动程序引用为 PostgreSQL 也不适用于标准 ODBC 驱动程序。【参考方案2】:

创建 DSN 时,是否使用正确的 odbcad 工具创建它?如果您的应用程序是 64 位,则在 C:\Windows\System32 中找到 64 位版本,如果您的应用程序是 32 位,则在 C:\Windows\SysWOW64 中找到 32 位版本?

【讨论】:

以上是关于Postgresql odbc driver error c# [IM002] [Microsoft][ODBC Driver Manager] Data source name not found的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ODBC 在 Access 中获取详细的 PostgreSQL 错误?

MS Access ODBC 问题

Redshift ODBC 64 位驱动程序错误

[转] 64位windows下添加postgreSQL odbc数据源

ODBC database driver for Go:Go语言通过ODBC 访问SQL server

ODBC Driver Development