You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MSOLEDBSQL19与TLS1.3时,ASP-ADODB无法执行SQL Server CRUD操作

问题场景

在Classic ASP页面中通过ADODB搭配MSOLEDBSQL19驱动连接SQL Server 2022,SQL Server端已启用Force encryption=Yes:

  • 当连接字符串配置Use Encryption for data=optional时,以TLS 1.2协议连接,所有CRUD操作均正常执行。
  • 改为Use Encryption for data=Strict以启用TLS 1.3后,仅SELECT查询能正常运行,执行UPDATE操作时出现两类错误:
    • 未指定锁类型:ADODB.Recordset错误800a0cb3,提示「记录集不支持更新」
    • 指定锁类型(rs.Open传入参数2,3,1):Microsoft OLE DB Driver 19错误80004005,提示「TDS协议流异常」
  • 尝试改用Encrypt=strict参数时,连接仍强制使用TLS 1.2协议,无法触发TLS 1.3。

环境信息:

  • SQL Server 2022(含EXPRESS与Developer版本)
  • MSOLEDBSQL驱动版本19.3.2
  • 客户端与服务器均为Windows Server 2022
  • 基于Classic ASP + ADODB实现数据库连接
解决方案

1. 升级MSOLEDBSQL驱动至最新稳定版

当前使用的19.3.2版本存在TLS 1.3环境下ADODB更新操作的兼容性BUG,官方在19.10.0及以上版本中已修复TDS协议流异常及Recordset更新限制问题,建议直接升级到最新版本。

2. 修正连接字符串参数配置

MSOLEDBSQL驱动需使用Use Encryption for Data=Strict参数才能触发TLS 1.3,同时需添加TrustServerCertificate=No避免驱动 fallback 到TLS 1.2,完整连接字符串示例:

Dim connStr
connStr = "Provider=MSOLEDBSQL19;Server=你的服务器地址;Database=目标数据库;Uid=登录账号;Pwd=登录密码;Use Encryption for Data=Strict;TrustServerCertificate=No"

注意:Encrypt=strict是ODBC驱动的专属参数,不适用于MSOLEDBSQL驱动,请勿混用。

3. 替换Recordset更新方式为ADODB.Command参数化执行

绕过Recordset在TLS 1.3下的锁类型兼容性问题,改用ADODB.Command执行参数化UPDATE语句,示例代码:

Dim conn, cmd
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
' 替换为你的UPDATE语句,使用?作为参数占位符
cmd.CommandText = "UPDATE 示例表 SET 字段1=? WHERE 主键字段=?"
' 添加参数:参数名、类型、方向、长度、值
cmd.Parameters.Append cmd.CreateParameter("newValue", adVarChar, adParamInput, 50, "更新后的值")
cmd.Parameters.Append cmd.CreateParameter("id", adInt, adParamInput, , 1001)
' 执行更新
cmd.Execute

' 资源释放
conn.Close
Set cmd = Nothing
Set conn = Nothing

4. 验证TLS 1.3连接状态

通过SQL Server系统视图确认当前连接使用的TLS版本,执行以下SQL语句:

SELECT session_id, encrypt_option, protocol_version 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

其中protocol_version值为0x0304即代表使用TLS 1.3协议。

5. 确认Windows Server 2022的TLS 1.3配置

确保系统未通过组策略或注册表禁用TLS 1.3:

  • 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3
  • 确认Client和Server子项中的Enabled值为1,DisabledByDefault值为0

内容的提问来源于stack exchange,提问作者Mangesh Auti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:30:28