【问题标题】:Can connect to data source in DAO but not in ADO using the same connection string可以使用相同的连接字符串连接到 DAO 中的数据源,但不能连接到 ADO 中的数据源
【发布时间】:2018-07-02 13:37:30
【问题描述】:

我正在尝试通过 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 做事方式的某些混乱细节的问题之一。我想我需要问另一个问题来处理它......新问题发布:Execute SQL stored procedure from VBA and retrieve all messages and result sets

【问题讨论】:

标签: sql-server odbc ado dao


【解决方案1】:

ODBC;DRIVER={用于 SQL 的 ODBC 驱动程序 11 服务器};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 附带的旧版 SQL Server OLE DB 提供程序 (SQLOLEDB),但最好使用 the latest MSOLEDBSQL driver as of this writing。连接字符串是:

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

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

【讨论】:

  • 好吧,去掉前面的“ODBC”;似乎允许查询完成 - 它运行了一分钟多一点,这是我所期望的。幸福取决于什么小事。但是,它返回一个错误,而不是我通过 DAO 尝试时得到的 2 行。请注意,SP 在其执行过程中实际上返回 3 个结果集,而 DAO 只返回第一个。该错误无济于事,只是提到了由主 SP 执行的第一个子 SP 的名称。我会尝试您建议的最新驱动程序 - 它可能会说一些更有帮助的内容。
  • 您为最新的 MSOLEDBSQL 驱动程序提供的链接将我带到了主要的 MS 下载区域。这个链接更具体:(version 18)
  • @marktwo,我更新了直接下载的链接。使用 ADO 需要注意的一件事是确保指定了 SET NOCOUNT ON,否则,代码将需要处理多个结果集。
  • 我已经切换到新的驱动程序并进行了一些阅读。但是,现在来自 SP 的输出消息不是作为记录集中的行返回,而是作为连接的 Errors 对象中的行返回,所有错误号为 -2147467259。共有 127 行,其中最后 3 行是: 错误 -2147467259:DIED 插入完成(Microsoft OLE DB Driver for SQL Server) 错误 -2147467259:从 SQL Server 收到未知令牌(Microsoft OLE DB Driver for SQL Server) 错误 -2147467259 : 查询超时(Microsoft OLE DB Driver for SQL Server)
  • 又一个转折点...我更新了 sp,通过删除大量的空间输出打印语句,它产生的行数少于 127 行。它现在正在运行而不会产生那个特定的错误——尽管我仍然想在某个地方捕获消息,最好不要在 Errors 集合中。
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多