0

Windows 7で64ビットのC++サーバーアプリケーションを実行していますが、データベースで選択を行い、結果セットでnext()を呼び出すと、プロセスは単純に終了し、例外もダンプもデバッグ情報もありません ResultSet->next( )。データベースへの書き込みは問題なく動作し、読み取りと書き込みの両方が 32 ビット バージョンで動作します

インスタント クライアントと SDK に付属の win64 oracle ライブラリの 11.2 バージョンを使用しています。

編集:それは最も単純なコードです

const std::string sql("select * from schedule_import");

std::auto_ptr<IRecordSet> query = m_conn->Open(sql);

while(query->Next()) // dies
{
  const std::string key(query->GetField("bean_key"));
  //...

IRecordSet は、next や getField などの DB ドライバーの一般的な機能の単なるインターフェイスであり、ここに実装されています。

bool OracleRecordSet::Next()
{
  return m_pResultSet->next() != NULL; //crashes here
}

ここで、m_pResultSet は oracle::occi::ResultSet* です。

4

2 に答える 2

0

何度も試した後、私の問題は解決しました。

デバッグ バージョンを持っていなかったので、デバッグ プログラムを oraocci11.lib にリンクしていました。少し検索した後、ライブラリのデバッグ バージョン oraocci11d.lib と対応する dll が見つかり、クラッシュはなくなりました。

于 2012-05-30T12:31:56.923 に答える
0

私は Oracle API に精通していませんが、m_pResultSet が NULL でない場合 (セグメンテーション違反の場合)、および例外がない場合 (abort()、raise() スタックの場合) は疑問です。

BR!

于 2012-05-29T18:27:37.450 に答える