1

我正在使用 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

4

2 回答 2

0

这发生在任何查询上(如果重要,存储过程)

这不是这里描述的问题吗?:

如果连接字符串的变化改变了行为,我会假设你有两个不同的模式,然后是同一个存储过程的两个版本;使用 SQL Nativ Client 执行的那个是不正确的。

于 2009-06-08T17:02:49.990 回答
0

我有完全相同的场景,并且在我们的服务器和客户端的服务器上已经有一年多了。我从来没有找到解决方案,因此我们只需要使用 SQL Server 驱动程序,这很遗憾,因为 SQL Native 似乎连接速度明显更快。

如上所述,这与相同存储过程的不同模式或不同版本无关。我使用文件 dsn 并简单地更改驱动程序名称将行为更改为/从上面提到的。它似乎发生在所有视图上(也可能存储过程,如所示)

如果有人确实找到了解决方案,我很想听听。

华威

于 2009-06-18T00:52:59.043 回答