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 错误?
[转] 64位windows下添加postgreSQL odbc数据源