【问题标题】:ADO showing "hidden columns" with SQL Native ClientADO 使用 SQL Native Client 显示“隐藏列”
【发布时间】:2009-06-05 13:51:56
【问题描述】:

我正在使用 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 on another_table.temp_id = temp_test.temp_id 内部连接 ​​yet_another_table on yet_another_table.another_id = another_table.another_id

这将在 ado 记录集中产生:

SQL 本地客户端

(0) temp_id

(1) 温度值

(2) temp_id(另一个表的主键)

(3) another_id(又一个表的主键)

SQL Server 驱动程序

(0) temp_id

(1) 温度值

SQL Server 2005 将它显示为:temp_id, temp_value

【问题讨论】:

  • 当。我希望我能提供比哀悼更有用的东西......

标签: vb6 asp-classic ado


【解决方案1】:

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

不是the issue described here 是吗? :

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

【讨论】:

  • 所描述的问题与我的相同,但我没有在我们的数据库中看到在没有 dbo 的情况下设置存储过程的任何地方。有趣的是,我们所有人都是从 dbo 开始的。但我会继续研究这种可能性......我确实发现了一件很奇怪的事情,我可以纠正这个问题,但只有 5 分钟。我找到了一些适用于 ADO 的注册表设置,我修改了这些设置,然后重新创建了 200 和 2005 的连接,我可以让它工作 5 分钟。 5 分钟后,它又回到了那个帖子中描述的问题......非常奇怪。
【解决方案2】:

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

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

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

华威

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 2023-04-08
    • 1970-01-01
    • 2014-01-27
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多