我正在使用 VB6 和 Classic ASP 开发一个遗留应用程序。我们使用断开连接的 ADO 记录集来回传递数据。通常这是有效的。但是最近开始发生的是对于任何内部/外部联接,ADO 将这些包括在可用记录中以供选择。因此,当指定要更新的列(在出现错误的情况下,主键列)时,它会依次更新错误的列(具有相同的名称)。我知道 ADO 拉取任何连接表的主键是正常的,但默认情况下 ADO 会隐藏它们。在我们的例子中,ADO 没有隐藏它们。
我将其缩小到 SQL Native Client 驱动程序无法正常工作。我可以回到 SQL Server 驱动程序 (SQL 2000),它运行良好,但是一旦我切换回 SQL Native Client,它就会出现上述行为。我检查了打开连接上的属性和记录集本身的属性,它们在每个实例中都匹配,除了一个(有多少隐藏列的计数是有道理的,因为 SQL Native 没有隐藏它们)。
我已经尝试了从 IIS 中删除 MSADC 文件夹并重新添加它的所有方法,我已经卸载了 SQL Native 并重新安装了它(随后将其升级到了最新版本)。在对它进行故障排除的过程中,我也多次重新创建了 ODBC 连接。在这一点上,我不知所措。
还有一件事要补充的是,SQL Native Client 似乎在我们的其他服务器上工作正常,没有其他人遇到这个问题。任何人都可能知道会发生什么?谢谢!
编辑:正在发生的事情的例子(这发生在任何查询(存储过程,如果它重要)和> = 1任何类型的连接)
在 temp_test 上选择 temp_id, temp_value 在 another_table.temp_id 上连接 another_table = temp_test.temp_id 在 yet_another_table.another_id 上连接 yet_another_table = another_table.another_id
这将在 ado 记录集中产生:
SQL 本机客户端
(0) temp_id
(1) temp_value
(2) temp_id(another_table的主键)
(3) another_id(又一个表的主键)
SQL Server 驱动程序
(0) temp_id
(1) temp_value
SQL Server 2005 将按原样显示它: temp_id, temp_value