1

Informix データベースから約 100 万件のレコードを取得し、MSSQL データベースに一括挿入するインポート アプリケーションに取り組んでいます。クエリは単純です: SELECT * FROM <view_name>. Informix からデータを取得するために、ODBC リーダーを使用しています。コマンドを実行した後、SQLBulkInsert に直接渡します。

問題はここにあります。すべてのデータが取得される場合があります。ただし、リーダーがレコード #181 までしか取得しない場合があり、この問題が発生した場合は常にこのレコードまでです。というわけSELECT SKIP 180 FIRST 2 * FROM <view_name>で、これらのレコードのデータが壊れていないかなどを確認したのですが、データは大丈夫のようです。また、接続タイムアウトも延長しました (接続が開かれると、これは直接的な影響はありませんが)。これは時々しか発生せず、取得プロセス全体を停止させるのは常に #182 レコードであるため、非常に厄介な問題です。

他の誰かに同様の問題がありましたか? または、これを引き起こしている可能性のあるものについて誰か考えがありますか?

これは、ODBC 経由でデータを取得するために使用しているアウトライン コードです。

            OdbcCommand cmd = _conn.CreateCommand();
            cmd.CommandText = //sql statement;
            OdbcDataReader reader = cmd.ExecuteReader();
            return reader;
4

1 に答える 1

1

場合によってはそうかもしれません。特に、ビューから選択した場合や結合から選択した場合に、問題が発生する可能性があります。その理由は、アクセス パスが異なると、データが来る順序が保証されない可能性があるためです。where 句、first、skip などを使用せずに、ビューに対して非常に基本的なクエリ (select * from など) を実行することを強くお勧めします。

于 2012-10-22T15:58:12.047 に答える