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