oracle occi getString дает _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse) - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь сделать getString на ResultSet из запроса Oracle OCCI, но я всегда получаю утверждение _BLOCK_TYPE_IS_VALID(pHead->nBlockUse). Мой проект - многопоточная отладка, и я попытался установить его в однопоточную отладку, как я обнаружил в Интернете, но это не имеет значения.

Я немного растерян, что вызывает это утверждение. Может кто-нибудь помочь?

Кажется, у меня есть только функция getString(), а не какая-либо другая.

    oracle::occi::Environment* environment;
    oracle::occi::Connection* con;
    oracle::occi::Statement* stmt;
    oracle::occi::ResultSet* res;


        try{
         environment = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::DEFAULT);
         con = environment->createConnection("db", "pssw", "DATABASE");     

        std::cout << "created connection" << std::endl;

        std::stringstream query;

        query << "SELECT MOD_KEY, MOD_SCRIPTLANGUAGE, MOD_SOURCE, MOD_CODE, MOD_STYLE, MOD_TYPE ";
        query << "FROM DB.MEDICAL_OBS_DEF ";
        query << "WHERE MOD_KEY = 735";

         stmt = con->createStatement(query.str());
         res = stmt->executeQuery();

         res->setMaxColumnSize(3,100);

         std::cout << "executed query" << std::endl;
         std::string mystring;
         while (res->next())
         {

             /*mystring = */res->getString(3);  ///_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) Assert!
         }
         std::cout << "printed resultset" << std::endl;

         stmt->closeResultSet(res);
         con->terminateStatement(stmt);
        environment->terminateConnection(con);

     }catch(oracle::occi::SQLException &e){
         std::cout<<e.what();
    }

Ответы [ 3 ]

2 голосов
/ 04 января 2011

Какой компилятор вы используете?

Убедитесь, что вы правильно загрузили версию http://www.oracle.com/technetwork/database/occidownloads-083553.html

Вы должны использовать DLL времени выполнения:

  • Многопоточная DLL Отладка (/ MDd) для отладки с oraocci11d.lib и oraocci11d.dll
  • многопоточная DLL (/ MD) для выпуска с oraocci11.lib и oraocci11.dll
2 голосов
/ 04 января 2011

Связаны ли вы с отладочными версиями Oracle DLL (oraocci11d.lib и oraocci11d.dll)?

Похоже, что ваша программа использует опцию отладки памяти Visual Studio, а используемые вами библиотеки Oracle Oracle - нет. Таким образом, ошибка возникает из-за того, что библиотека времени выполнения считает, что существует проблема выделения / освобождения памяти.

1 голос
/ 12 ноября 2011

если вы используете DB в кодировке UTF8 попробуйте использовать следующее Environment * environment = Environment :: createEnvironment ("AL32UTF8", "UTF8");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...