对本地临时表的访问不再有效



我们有一个用VB6编写的非常旧的程序,运行良好。现在我们发现了一个错误,几个月前运行良好的东西现在不再运行了。幸运的是,我有一台旧的虚拟机和一台新的虚拟机,前者有工作代码,后者有错误代码,可以进行比较和调试。

经过大量的搜索和尝试,我找到了导致错误的代码更改,但我不知道该怎么办,因为这种代码更改是必要的,不能收回(至少我不知道(。

也许你能帮忙?

以下是对什么不起作用以及为什么不起作用的描述。


此VB6程序连接到SQL数据库(Microsoft SQL Server 2017,但SQL Server的版本不应相关(。然后它应该创建一个报告。

为此,代码创建了一个临时本地表,如下所示:

CREATE TABLE #tTempTable ...

此临时表将填充数据,然后查询以创建报告。对于所有这些,使用了这样的连接字符串:

Data Provider=SQLOLEDB;Provider=MSDatashape;Integrated Security=SSPI;...

几周前,此连接字符串被更改为(数据提供程序已更改(:

Data Provider=MSOLEDBSQL;Provider=MSDatashape;Integrated Security=SSPI;...

此更改导致VB6程序停止工作。临时本地表仍然可以创建并填充数据,但查询失败,并且告诉没有对象"#tTempTable"。

如果我切换回旧的数据提供程序,它会再次工作。

如果签入评论是正确的,那么数据提供程序的这次更改是因为旧的不适用于TLS 1.2(这不是我的专业领域,所以我对此一无所知(。

现在我不知道如何解决这个问题,除了可能从临时表切换到持久表,或者我还能做什么吗?,也许使用另一个使用TLS 1.2和临时表的数据提供程序?

由于安全要求,我们在将SQL提供程序升级到与TLS 1.2兼容的新提供程序后遇到了同样的问题。SQL提供程序与上面提到的相同。

我们找到的唯一解决方案是重写代码,将数据存储在一个永久表中,然后发出一个单独的命令来检索结果。

我们已经看到这个问题的报道。它看起来像是ADO方法和升级后的SQL提供程序的错误。

相关内容

最新更新