首页 > 解决方案 > 可以使用相同的连接字符串连接到 DAO 中的数据源,但不能连接到 ADO 中的数据源

问题描述

我正在尝试通过 DAO / ADO 从 Access 在 SQL Server 后端执行 SQL Server 存储过程。

通过使用带有到 ODBC 数据源的连接字符串的传递查询,我可以让它在 DAO 中运行良好但是当我尝试在 ADO Connection 对象上使用相同的连接字符串时,我只收到以下消息:

错误 -2147467259:[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序(Microsoft OLE DB Provider for ODBC Drivers)

与 DAO 一起使用的连接字符串是一个指向 DSN 文件的指针:“ODBC;FILEDSN=RISCGen2.dsn”。

考虑到 ADO 可能无法消化这一点,我尝试将字符串替换为 DSN 文件中的相关内容,即:

“ODBC;DRIVER={ODBC Driver 11 for SQL Server};UID=my.loginid;PWD=mypassword;SERVER=WYNRISC08;Database=RISCGen2”.

但是,我仍然遇到同样的错误。

有人能发现我哪里出错了吗?提前致谢。

附录

Dan Guzman 已经回答了我提出的问题。现在的问题已成为了解有关 ADO 做事方式的某些混乱细节的问题之一。我想我需要问另一个问题来处理它......发布的新问题:从 VBA 执行 SQL 存储过程并检索所有消息和结果集

标签: sql-serverodbcadodao

解决方案


ODBC;DRIVER={ODBC Driver 11 for SQL Server};UID=my.loginid;PWD=mypassword;SERVER=WYNRISC08;Database=RISCGen2

省略无关ODBC规范:

DRIVER={ODBC Driver 11 for SQL Server};UID=my.loginid;PWD=mypassword;SERVER=WYNRISC08;Database=RISCGen2

请注意,经典 ADO 本身就是 OLE DB,并使用 Microsoft OLE DB Provider for ODBC Drivers (MSDASQL) 来使用 ODBC 驱动程序。最好改用 OLE DB 提供程序。您可以使用随 Windows (SQLOLEDB) 提供的旧版 SQL Server OLE DB 提供程序,但最好在撰写本文时使用最新的 MSOLEDBSQL 驱动程序。连接字符串是:

Provider=MSOLEDBSQL;UID=my.loginid;PWD=mypassword;SERVER=WYNRISC08;Database=RISCGen2

您可能需要指定DataTypeCompatibility=80是否使用较新的 SQL 数据类型,因为 ADO 经典是一个成熟的 API,自 SQL Server 2000 以来尚未增强,并且不知道此后添加的数据类型。


推荐阅读