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* です。