【问题标题】:a *FUTUREPROOF* Project reference, to connect to SQL Server?*FUTUREPROOF* 项目参考,连接到 SQL Server?
【发布时间】: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,并且会不断更新:

我在安装驱动程序后测试了 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


【解决方案1】:

MDAC 和 VB6 运行时是 Windows 组件,MSOLEDBSQL 是最新的,并将继续维护。因此,这是您现在和将来运行此遗留代码库的最佳组合。

【讨论】:

    【解决方案2】:

    未来打样有点像“水晶球”。 很多我们可以在代码中做很多事情来让我们的生活更轻松,但归根结底 - 当我们使用 3rd 方库时 - 我们不知道什么时候会弃用一个库,什么它会支持或不支持。

    当涉及到我们作为开发人员拥有的代码时,我们可以编写抽象并尽最大努力实现向后兼容,因为我们突然意识到有更好的做事方式(或者,实际上,只是进行代码重构,不想破坏我们的客户)。

    使用第三方代码,这是不切实际的。归根结底,您的数据库连接需要一个连接字符串和一个支持它的提供程序。预计将来可能会发生变化,您的路线图应该密切关注它。在某些时候,您必须像刚才那样执行更新。

    【讨论】:

      【解决方案3】:

      您可以考虑将负责建立 DB 连接的代码重构为自己的 VB6 DLL。该 DLL 将管理连接字符串,包含必要的引用,并负责建立实际连接并返回正确的对象。

      将此 DLL 设置为具有二进制兼容性。

      将来如果连接细节发生变化,只需影响单个 DLL,从而最大限度地减少重新测试和重新部署。

      此外,您可以将连接字符串等数据存储在配置文件中。在仅需要更改该文本的有限情况下,可以想象用户可以在给出良好指示的情况下自己进行更改。但除此之外,我认为增加配置文件的复杂性是不值得的。它还会造成更多的陷阱和失败点。

      【讨论】:

        最近更新 更多