Postgresql odbc驱动程序错误c#[IM002] [Microsoft] [ODBC驱动程序管理器]找不到数据源名称

时间:2016-01-14 07:43:40

标签: c# database odbc postgresql-9.5

我正在设置数据库应用程序与数据库无关,当使用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驱动程序完美运行,所以我无法理解为什么我无法在我的应用程序中连接,我在连接字符串中使用的驱动程序名称是否有错误?

2 个答案:

答案 0 :(得分: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;')

答案 1 :(得分:1)

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