【发布时间】:2026-01-02 11:25:01
【问题描述】:
背景
我有访问 SQL Server 的旧 VB6 代码。当为 SQL Server 禁用 TLS 1.0 时,它会产生错误代码 0x80004005,因为代码仍然使用提供程序 SQLOLEDB:
[DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL 安全性 错误。
它没有明确使用 TLS,但根据 Microsoft 文档,TLS 始终用于凭据。
可能的解决方案
环顾四周后,我发现 Microsoft 发布了新的提供程序 MSOLEDBSQL 作为 SQLOLEDB 的替代品。根据他们的文档,MSOLEDBSQL 支持 TLS 1.2,并且会不断更新:
-
https://docs.microsoft.com/en-us/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-ver15
我在安装驱动程序后测试了 MSOLEDBSQL,并将 (ADODB.Connection) 连接字符串从:
c.ConnectionString = "Provider=SQLOLEDB;Data Source=" & svr & ";Initial Catalog=" & db & ";User Id=" & u & ";Password=" & p & ";"
到:
c.ConnectionString = "Provider=MSOLEDBSQL;DataTypeCompatibility=80;Data Source=" & svr & ";Initial Catalog=" & db & ";User Id=" & u & ";Password=" & p & ";"
这解决了问题。
问题
但是,我不确定我正在做的是面向未来的。
- 这是否是提供者 MSOLEDBSQL 确实是未来的证明,或者你会 推荐另一个?
- 我的 VB6 项目是否应该继续引用 ADODB(“msado28.tlb”Microsoft ActiveX 数据对象 2.8 库),或者是否有更多 面向未来的参考?
- 例如:这将在未来与 TLS 1.3 一起使用吗?
我希望尽可能少地改变
【问题讨论】:
-
根据 documentation MSOLEDBSQL 在 2018 年未弃用。
-
@Larnu 确实如此。但我不能在不选择项目参考的情况下使用 MSOLEDBSQL
-
@Lamu 不推荐使用的是整个 OLEDB(支持 ODBC)。 SQLOLEDB 提供程序仍被弃用,取而代之的是 MSOLEDBSQL,但可以与 sql2019 一起使用,并且是唯一可以与旧版 sql2000 一起使用的提供程序。
-
@Larnu Win10 上没有 ADO 2.8 二进制文件。它只是一个类型库,它“指向”最新 ADO 6.1 二进制文件中的实现。如果 ADO 得到更新,它将附带新的 ADO 2.8 类型库,该库指向新的 ADO 6.x 二进制文件。 JFYI,ADO 6.1 二进制文件在 Win10 上称为
msado15.dll,因此您可以确定所有兼容性支持何时开始。
标签: sql-server vb6 oledb adodb