Подскажите, в приложении создаются разные потоки. Из этих разных потоков я выполняю запрос к MS SQL 2005 по одному хэндлу:
SQLHSTMT sqlHstmt;
SQLRETURN sqlRet;
SQLINTEGER sqlMsgType = 0;
SQLINTEGER cbMsgType = 0;
std::string query("select [TYPE] from OUTBOX where MSGUID='");
query.append( guid );
query.append( _T("'") );
sqlRet = SQLAllocHandle( SQL_HANDLE_STMT, mdb_->m_hdbc, &sqlHstmt );
if ( sqlRet != SQL_SUCCESS )
{
SQLCHAR err_msg[ 256 ];
mdb_->checkError( sqlRet, SQL_HANDLE_STMT, sqlHstmt, err_msg, sizeof(err_msg) - 1 );
LogToLogEx( "Ошибка чтения из БД: %s", (char*)err_msg );
return;
}
sqlRet = SQLExecDirectA( sqlHstmt, (SQLCHAR*)query.c_str(), SQL_NTS );
if ( sqlRet != SQL_SUCCESS )
{
SQLCHAR err_msg[ 256 ];
mdb_->checkError( sqlRet, SQL_HANDLE_STMT, sqlHstmt, err_msg, sizeof(err_msg) - 1 );
LogToLogEx( "Ошибка чтения из БД: %s", (char*)err_msg );
return;
}
sqlRet = SQLBindCol( sqlHstmt, 1, SQL_C_ULONG, &sqlMsgType, 0, &cbMsgType );
if ( sqlRet != SQL_SUCCESS )
{
SQLCHAR err_msg[ 256 ];
mdb_->checkError( sqlRet, SQL_HANDLE_STMT, sqlHstmt, err_msg, sizeof(err_msg) - 1 );
LogToLogEx( "Ошибка чтения из БД: %s", (char*)err_msg );
return;
}
на строке
sqlRet = SQLExecDirectA( sqlHstmt, (SQLCHAR*)query.c_str(), SQL_NTS );
всё зависает. Вроде в MSDN написано для выполнение запросов по одному hdbc в разных потоках возможно. Если кто с подобным сталкивался, подскажите в чём проблема ?