古老ASP站点Global.asa连接SQL Server 2022报错0x80040e21原因咨询
ASP站点连接SQL Server 2022出现0x80040e21错误的分析
问题背景
我有一个简易的老式ASP站点,Global.asa文件仅包含数据库连接打开操作,无SSIS包类的复制操作,仅在Global.asa中首次尝试连接SQL Server 2022时出现问题。
代码片段
Sub Session_OnStart() ... cnn.Open DSN_Name
完整错误信息
英文原文
Unhandled exception at line 134, column 2 in http://localhost:80/LM/W3SVC/1/ROOT/global.asa 0x80040e21 - Microsoft OLE DB Service Components: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
中文翻译
未处理的异常发生在 http://localhost:80/LM/W3SVC/1/ROOT/global.asa 的第134行第2列 0x80040e21 - Microsoft OLE DB服务组件:多步骤OLE DB操作生成错误。请检查每个OLE DB状态值(如果可用)。未执行任何操作。
ODBC数据源配置
Microsoft ODBC Driver for SQL Server Version 18.02.0001 Data Source Name: XXXXXXXXX Data Source Description: Server: Localhost Use Integrated Security: No Database: XXXXXXXXXX Language: (Default) Data Encryption: Optional Trust Server Certificate: Yes Multiple Active Result Sets(MARS): No Mirror Server: Translate Character Data: Yes Log Long Running Queries: Yes Query Log File: F:\TMP2\XXXXXXXX-QUERY.LOG Query Log Time: 30000 Log Driver Statistics: Yes Statistics File: F:\TMP2\XXXXXXXXX-STATS.LOG Use Regional Settings: No Use ANSI Quoted Identifiers: Yes Use ANSI Null, Paddings and Warnings: Yes Use FMTONLY: Yes
SQL Server版本
Microsoft SQL Server 2022 (RTM-GDR) (KB5021522) - 16.0.1050.5 (X64) Jan 23 2023 17:02:42 Copyright (C) 2022 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 22621: )
错误含义
0x80040e21是OLE DB服务组件抛出的多步骤操作错误,意思是在建立数据库连接的一系列关联操作中,某一个或多个环节返回了异常状态,导致整个连接流程中断,且没有完成任何实际的数据库操作。这类错误不是单一操作直接失败,而是多步骤协作过程中出现了状态不匹配或参数冲突。
引发错误的可能原因
- ODBC驱动版本兼容性问题:你使用的ODBC Driver 18 for SQL Server是较新版本,而老式ASP基于VBScript和OLE DB桥接组件(MSDASQL),可能无法适配驱动的新特性(如加密协商、证书验证逻辑),进而触发多步骤操作异常。
- DSN配置与SQL Server安全设置冲突:SQL Server 2022默认可能强制加密连接,而DSN中设置
Data Encryption: Optional,两者在加密协商过程中出现不兼容,导致连接步骤出错。 - FMTONLY选项干扰:DSN中启用了
Use FMTONLY: Yes,该选项用于仅返回查询元数据,但在ASP会话启动阶段建立连接时,可能触发不必要的元数据请求,打乱了正常的连接流程。 - 身份验证配置问题:DSN设置
Use Integrated Security: No,但如果未正确配置SQL Server账号的用户名和密码,或者ASP进程没有权限读取DSN中存储的凭据,会导致身份验证步骤失败,进而引发多步骤错误。 - OLE DB与ODBC桥接组件异常:ASP通过MSDASQL(OLE DB Provider for ODBC Drivers)调用ODBC驱动,这个桥接组件可能无法正确传递ODBC Driver 18的配置参数,导致连接过程中出现状态不一致。
内容的提问来源于stack exchange,提问作者John14
相关产品推荐
相关产品推荐

