我正在使用VB6和Classic ASP开发遗留应用程序。我们使用断开连接的ADO记录集来回传递数据。通常这是有效的。但最近开始发生的事情是任何内/外连接,ADO将这些包括在可用记录中供选择。因此,当指定要更新的列时(在错误输出的情况下,主键列),它依次更新错误的列(具有相同的名称)。我知道ADO拉动任何连接表的主键是正常的,但默认情况下是ADO隐藏它们。在我们的例子中,ADO没有隐藏它们。
我将其缩小到的是SQL Native Client驱动程序无法正常工作。我可以回到SQL Server驱动程序(SQL 2000)并且它工作得很好,但是当我切换回SQL Native Client时,它会展示上面的行为。我已经检查了打开连接上的属性和记录集本身的属性,它们在每个实例中都匹配,除了一个(有多少隐藏列的数量是有意义的,因为SQL Native没有隐藏它们)。 / p>
我已尝试从IIS中删除MSADC文件夹并重新添加它,我已卸载SQL Native并重新安装它(随后将其升级到最新版本)。在对其进行故障排除的过程中,我已经多次重新创建了ODBC连接。在这一点上,我不知所措。
另外要添加一件事,看起来SQL Native Client在我们的其他服务器上工作正常,没有其他人遇到此问题。任何人都可能知道会发生什么?谢谢!
编辑:发生了什么的示例(这适用于任何查询(存储过程,如果重要)和> = 1个任何类型的连接)
在temp_test上选择temp_id,temp_value 内部联接another_table在another_table.temp_id = temp_test.temp_id上 内联接yet_another_table on yet_another_table.another_id = another_table.another_id
这将在ado记录集中产生:
SQL Native Client
(0)temp_id
(1)temp_value
(2)temp_id(another_table的主键)
(3)another_id(another_table的主键)
SQL Server驱动程序
(0)temp_id
(1)temp_value
SQL Server 2005将显示它应该是:temp_id,temp_value
答案 0 :(得分:0)
对于任何查询(如果重要的存储过程)都会发生这种情况
它不是the issue described here吗? :
如果连接字符串中的更改改变了行为,我认为您有两个不同的模式,然后是同一存储过程的两个版本;而使用SQL Nativ客户端执行的那个是不正确的。
答案 1 :(得分:0)
我有完全相同的情况,并且已经在我们的客户端的服务器和服务器上使用了一年多。我从来没有找到解决方案,因此我们只需要使用SQL Server驱动程序,这很遗憾,因为SQL Native似乎连接速度明显加快。
这与上面建议的不同模式或相同存储过程的不同版本无关。我使用文件dsn,只需更改驱动程序名称就可以改变上述行为。它似乎发生在所有观点上(也可能是指示的存储过程)
如果有人找到解决方案我会热衷于听到它。
沃里克