void* CODBC_BCPInCmd::x_GetDataTerminator(EDB_Type type) { switch (type) { case eDB_Char: case eDB_VarChar: case eDB_LongChar: case eDB_Text: return _T_NCBI_ODBC(""); default: break; } return NULL; }
CDB_Result* CODBC_RPCCmd::Result() { enum {eNameStrLen = 64}; if (m_Res) { delete m_Res; m_Res = 0; m_HasMoreResults = xCheck4MoreResults(); } if ( !WasSent() ) { string err_message = "A command has to be sent first." + GetDbgInfo(); DATABASE_DRIVER_ERROR( err_message, 420010 ); } if(!m_HasMoreResults) { SetWasSent(false); return 0; } SQLSMALLINT nof_cols = 0; odbc::TChar buffer[eNameStrLen]; while(m_HasMoreResults) { CheckSIE(SQLNumResultCols(GetHandle(), &nof_cols), "SQLNumResultCols failed", 420011); if(nof_cols < 1) { // no data in this result set SQLLEN rc; CheckSIE(SQLRowCount(GetHandle(), &rc), "SQLRowCount failed", 420013); m_RowCount = rc; m_HasMoreResults = xCheck4MoreResults(); continue; } if(nof_cols == 1) { // it could be a status result SQLSMALLINT l; CheckSIE(SQLColAttribute(GetHandle(), 1, SQL_DESC_LABEL, buffer, sizeof(buffer), &l, 0), "SQLColAttribute failed", 420015); if(util::strcmp(buffer, _T_NCBI_ODBC("STpROCrETURNsTATUS")) == 0) { //this is a status result m_HasStatus = true; m_Res = new CODBC_StatusResult(*this); } } if(!m_Res) { if(m_HasStatus) { m_HasStatus = false; m_Res = new CODBC_ParamResult(*this, nof_cols); } else { m_Res = new CODBC_RowResult(*this, nof_cols, &m_RowCount); } } return Create_Result(*m_Res); } SetWasSent(false); return 0; }