【问题标题】:oracle::occi::ResultSet::next() crashes my programoracle::occi::ResultSet::next() 使我的程序崩溃
【发布时间】:2012-05-29 16:42:37
【问题描述】:

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

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

编辑:这是最简单的代码

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*

【问题讨论】:

  • 你能发布你的代码吗?

标签: c++ oracle occi


【解决方案1】:

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

BR!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多