在运行Windows 7 SP1、Windows Server 2008 R2 SP1或安装有KB983246的计算机上编译的ADO应用程序,无法运行在低级别的操作系统上。

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

针对 Windows Server 2003 的支持已于 2015 年 7 月 14 日终止。

Microsoft 已于 2015 年 7 月 14 日终止了对于 Windows Server 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2517589
警告 ︰ADO 和 ADO MD 尚未经过完全测试在 Microsoft.NET Framework 的环境中。他们可能会导致间歇性问题,尤其是在基于服务的应用程序或多线程应用程序中。本文中讨论的技术只应作为一项临时措施对 ADO.NET 的迁移过程。之后必须进行完整的测试,以确保没有兼容性问题,只应使用这些技术。通过这种方式使用 ADO 或 ADO MD 导致的任何问题都不受支持。有关详细信息,请参阅以下文章 Microsoft 知识库中相应的文章 ︰
840667 在.NET Framework 应用程序中使用 ADO 和 ADO MD 时收到意外的错误
症状
请考虑以下情形:在运行 Windows 7 Service Pack 1 (SP1) 或 Windows 服务器 2008 R2 SP 1 或有 KB9823246 安装程序的计算机上,使用下列应用程序之一重新编译 Microsoft ActiveX 数据对象 (ADO) 应用程序:
  • Microsoft Visual C++
  • Microsoft Visual Basic for Applications (VBA)
  • Microsoft Visual Basic 6
  • Microsoft.NET 应用程序
在此方案中,您发现应用程序不会运行在低级别的操作系统上。例如,它不会在 Windows Vista 和其他早期版本的 Windows 上运行 Windows 7 的发布版本。这取决于您的实现中,您还会收到类似于以下内容之一的错误消息。(您可能会收到其他错误消息)。

错误消息 1
REGDB_E_CLASSNOTREG (0X80040154)
错误消息 2
E_POINTER (0X80004003)
错误消息 3
E_NOINTERFACE (0X80004002)
错误消息 4
找不到 COM 对象强制转换为接口类型的 'System.__ComObject' 类型的' ADODB。连接。此操作失败,因为对 COM 组件的接口 IID {00001550-0000-0010-8000-00AA006D2EA4} 的 QueryInterface 调用失败,出现以下错误 ︰ 不支持此接口 (HRESULT 中的异常 ︰ 0x80004002 (E_NOINTERFACE))。"
以下 Visual C++ 代码段复制此问题。
#import " msado15.dll" no_namespace rename("EOF","EndOfFile") int main(){  CoInitialize(NULL);  _ConnectionPtr pConnection = NULL;     HRESULT hr = pConnection.CreateInstance(__uuidof(Connection)); //hr gets E_NOINTERFACE here}
代码段下面的 Visual Basic for Applications 复制此问题。
Private Sub Form_Load() Dim Conn As New ADODB.Connection ‘Runtime error here: Class does not support Automation or does not support expected interfaceEnd Sub
VBA 错误 ︰运行时错误"430": 类不支持自动化或不支持期望的接口

注意:Microsoft 不再支持 ADO 的主互操作程序集,并且不再支持 Visual Basic 6。有关 Visual Basic 6 可支持性的详细信息,请访问下面的 MSDN 网页 ︰ 有关 ADO 支持性的主互操作程序集的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰
318559 有关 ADO (ADODB) 在 Visual Studio.NET 中使用的主互操作程序集
原因
此问题是由于一些 ADO 接口已更改在 Windows 7 SP1 中要与新实例标识符 (Iid) 相关联。旧的 IID 接口分配给以下后缀 ︰
_Deprecated
例如,接口 _Connection 已更新,如下所示 ︰
  • 在 Windows 7 中并在 Windows 的早期版本中,_Connection IID 是 00000550-0000-0010-8000-00AA006D2EA4。
  • 在 Windows 7 SP1 中,_Connection IID 是 00001550-0000-0010-8000-00AA006D2EA4,和 _Connection_Deprecated 的 IID 是 00000550-0000-0010-8000-00AA006D2EA4。
如果您的应用程序使用早期绑定到 _Connection,应用程序二进制在编译过程中存储新的 IID。IID 不存在,因此,在低级别的操作系统上运行应用程序时,这会导致错误。

在 ADO 2.7 及更高版本中,一些 ADO Api 是与平台相关的。在 64 位版本的 Windows,这些 ADO Api 使用 64 位数据类型 (例如LONGLONG数据类型) 处理参数。但是,使用这些 Api 的应用程序仍使用的数据类型。因此,当您尝试运行宏时收到"类型不匹配"错误消息。
解决方案
要解决此问题,请安装下面 Microsoft 知识库中相应的文章中介绍的更新之一 ︰
2640696 在 Windows 7 SP1 或 Windows Server 2008 R2 SP1 中编译的基于 ADO 应用程序不能运行在早期版本的 Windows中

警告:本文已自动翻译

属性

文章 ID:2517589 - 上次审阅时间:06/12/2016 11:20:00 - 修订版本: 15.0

Windows 7 Enterprise, Windows 7 Home Basic, Windows 7 Home Premium, Windows 7 Professional, Windows 7 Starter, Windows 7 Ultimate, Microsoft Windows XP Service Pack 3, Microsoft Windows Server 2003 Service Pack 2, Windows Vista Business, Windows Vista Business 64-bit edition, Windows Vista Enterprise, Windows Vista Enterprise 64-bit edition, Windows Vista Home Basic, Windows Vista Home Basic 64-bit edition, Windows Vista Home Premium, Windows Vista Home Premium 64-bit edition, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Vista Starter, Windows Vista Ultimate, Windows Vista Ultimate 64-bit edition, Windows Server 2008 Datacenter, Windows Server 2008 Datacenter without Hyper-V, Windows Server 2008 Enterprise, Windows Server 2008 Enterprise without Hyper-V, Windows Server 2008 for Itanium-Based Systems, Windows Server 2008 for Windows Essential Server Solutions, Windows Server 2008 for Windows Essential Server Solutions without Hyper-V, Windows Server 2008 Foundation, Windows Server 2008 Standard, Windows Server 2008 Standard without Hyper-V, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Datacenter without Hyper-V, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Enterprise without Hyper-V, Windows Server 2008 R2 for Embedded Systems, Windows Server 2008 R2 for Itanium-Based Systems, Windows Server 2008 R2 Foundation, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Standard without Hyper-V

  • kbprb kbsurveynew kbprogramming kbtshoot kbmt KB2517589 KbMtzh
反馈