0

我有一个在 Windows 7 上运行的 64 位 C++ 服务器应用程序,当它在数据库上进行选择并在结果集上调用 next() 时,进程简单地死掉,在 ResultSet->next( )。数据库上的写入工作没有问题,读写都在 32 位版本上工作

我正在使用即时客户端和 SDK 附带的 11.2 版本的 win64 oracle 库

编辑:这是最简单的代码

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 只是 DB 驱动程序常用功能的接口,如 next、getField,在此处实现

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

其中 m_pResultSet 是 oracle::occi::ResultSet*

4

2 回答 2

0

我不熟悉 Oracle API,但问题是 m_pResultSet 是否不为 NULL(在分段错误的情况下)以及是否没有异常(在 abort()、raise() 堆栈的情况下)。

BR!

于 2012-05-29T18:27:37.450 回答
0

经过多次尝试,我的问题得到了解决。

我将我的调试程序链接到 oraocci11.lib 因为我没有调试版本,我认为这并不重要。经过一番搜索,我找到了库的调试版本 oraocci11d.lib,带有相应的 dll,并且崩溃消失了

于 2012-05-30T12:31:56.923 回答