私は、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