1

私は、VB6 とクラシック ASP を使用してレガシー アプリケーションに取り組んでいます。切断された ADO レコードセットを使用してデータをやり取りしています。通常、これは機能します。しかし、最近発生し始めたのは、任意の内部/外部結合であり、ADO は選択可能なレコードにこれらを含めています。そのため、更新する列を指定すると (エラーが発生した場合は主キー列)、間違った列 (同じ名前) が更新されます。ADO が結合されたテーブルの主キーをプルするのは正常なことですが、これのデフォルトでは、ADO はそれらを非表示にします。私たちの場合、ADO はそれらを隠していません。

私が絞り込んだのは、SQL Native Client ドライバーが正しく機能していないということです。SQL Server ドライバー (SQL 2000) に戻すと問題なく動作しますが、SQL Native Client に戻すとすぐに上記の動作が発生します。開いている接続のプロパティとレコードセット自体のプロパティを確認しましたが、それらは 1 つを除くすべてのインスタンスで一致します (SQL ネイティブが隠していないため、意味のある隠し列の数)。

IIS から MSADC フォルダーを削除して再度追加することからすべてを試しました。SQL Native をアンインストールして再インストールしました (その後、最新バージョンにアップグレードしました)。トラブルシューティングの過程で、ODBC 接続を数回再作成しました。この時点で、私は途方に暮れています。

また、追加することの 1 つは、SQL Native Client が他のサーバーで正常に動作し、他の誰もこの問題を抱えていないようです。誰が何が起こっているのか考えているかもしれませんか? ありがとう!

編集:何が起こっているかの例(これは、任意のクエリ(重要な場合はストアドプロシージャ)で発生し、あらゆる種類の1つ以上の結合で発生します)

temp_test で temp_id、temp_value を選択する another_table.temp_id で another_table を内部結合します。

これは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

これは、任意のクエリで発生します (重要な場合はストアド プロシージャ)。

ここに書いてある問題じゃないの?:

接続文字列の変更によって動作が変わる場合、2 つの異なるスキーマがあり、同じストアド プロシージャの 2 つのバージョンがあると思います。SQL Nativ Client で実行されたものは正しくありません。

于 2009-06-08T17:02:49.990 に答える
0

私はまったく同じシナリオを持っており、サーバーとクライアントのサーバーで1年以上使用しています. 解決策が見つからなかったので、SQL Server ドライバーを使用するしかありませんでした。これは、SQL ネイティブの方が接続速度が大幅に速いため、残念です。

上記のように、同じストアド プロシージャの異なるスキーマや異なるバージョンとは関係ありません。私はファイル dsn を使用しており、ドライバー名を変更するだけで、上記の動作との間で動作が変わります。すべてのビューで発生するようです(おそらく、示されているように保存された手順も)

誰かが解決策を見つけた場合、私はそれについて聞きたいと思っています。

ワーウィック

于 2009-06-18T00:52:59.043 に答える