我有一个在Windows 7上运行的64位C ++服务器应用程序,当它在数据库上执行select并在结果集上调用next()时,该过程简单地死亡,没有异常,没有转储,并且在ResultSet之后没有调试信息 - >接着()。在数据库上写入没有问题,读取和写入都适用于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只是DB驱动程序常用功能的接口,例如next,getField,它在这里实现
bool OracleRecordSet::Next()
{
return m_pResultSet->next() != NULL; //crashes here
}
其中m_pResultSet是oracle :: occi :: ResultSet *
答案 0 :(得分:0)
我不熟悉Oracle API,但问题是m_pResultSet是否为NULL(如果出现分段错误)且没有异常(如果是abort(),则为raise()堆栈)。
BR!
答案 1 :(得分:0)
经过大量的尝试后,我的问题得到了解决。
我正在将我的调试程序链接到oraocci11.lib,因为我没有调试版本,我认为这并不重要。经过一些搜索,我发现了库的调试版本oraocci11d.lib,带有相应的dll,崩溃就消失了