Postgresql odbc 驱动程序错误 c# [IM002] [Microsoft][ODBC 驱动程序管理器]

本文关键字:驱动程序 Microsoft ODBC 管理器 odbc IM002 错误 Postgresql | 更新日期: 2023-09-27 18:30:31

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

[IM002] [Microsoft][ODBC 驱动程序管理器] 找不到数据源名称

我通常使用 SQL 服务器和 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 驱动程序完美运行,所以我不明白为什么我无法在我的应用程序中连接,我在连接字符串中使用的驱动程序名称是否有错误?

Postgresql odbc 驱动程序错误 c# [IM002] [Microsoft][ODBC 驱动程序管理器]

您的错误消息看起来很奇怪。它告诉未找到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;')

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