⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}CODBC_Connection::~CODBC_Connection(){    if (Refresh()) {        switch(SQLDisconnect(m_Link)) {        case SQL_SUCCESS_WITH_INFO:        case SQL_ERROR:            m_Reporter.ReportErrors();        case SQL_SUCCESS:            break;        default:            throw CDB_ClientEx(eDB_Error, 410009, "CODBC_Connection::~CODBC_Connection",                               "SQLDisconnect failed (memory corruption suspected)");                    }    }    if(SQLFreeHandle(SQL_HANDLE_DBC, m_Link) == SQL_ERROR) {        m_Reporter.ReportErrors();    }        }void CODBC_Connection::DropCmd(CDB_BaseEnt& cmd){    m_CMDs.Remove(static_cast<TPotItem> (&cmd));}static bool ODBC_xSendDataPrepare(SQLHSTMT cmd, CDB_ITDescriptor& descr_in,                                  SQLINTEGER size, bool is_text, bool logit, 						          SQLPOINTER id, CODBC_Reporter& rep){    string q= "update ";    q+= descr_in.TableName();    q+= " set ";    q+= descr_in.ColumnName();    q+= "=? where ";    q+= descr_in.SearchConditions();    //q+= " ;\nset rowcount 0";#ifdef SQL_TEXTPTR_LOGGING	if(!logit) {		switch(SQLSetStmtAttr(cmd, SQL_TEXTPTR_LOGGING, /*SQL_SOPT_SS_TEXTPTR_LOGGING,*/			(SQLPOINTER)SQL_TL_OFF, SQL_IS_INTEGER)) {		case SQL_SUCCESS_WITH_INFO:		case SQL_ERROR:			rep.ReportErrors();		default: break;		}	}#endif	switch(SQLPrepare(cmd, (SQLCHAR*)q.c_str(), SQL_NTS)) {	case SQL_SUCCESS_WITH_INFO:		rep.ReportErrors();	case SQL_SUCCESS: break;	case SQL_ERROR:		rep.ReportErrors();	default: return false;	}				SQLSMALLINT par_type, par_dig, par_null;    SQLUINTEGER par_size;#if 0	switch(SQLNumParams(cmd, &par_dig)) {	case SQL_SUCCESS: break;	case SQL_SUCCESS_WITH_INFO:	case SQL_ERROR:		rep.ReportErrors();	default: return false;	}#endif	switch(SQLDescribeParam(cmd, 1, &par_type, &par_size, &par_dig, &par_null)){	case SQL_SUCCESS_WITH_INFO:		rep.ReportErrors();	case SQL_SUCCESS: break;	case SQL_ERROR:		rep.ReportErrors();	default: return false;	}    SQLINTEGER p= SQL_LEN_DATA_AT_EXEC(size);    switch(SQLBindParameter(cmd, 1, SQL_PARAM_INPUT,                      is_text? SQL_C_CHAR : SQL_C_BINARY, par_type,                     // is_text? SQL_LONGVARCHAR : SQL_LONGVARBINARY,                     size, 0, id, 0, &p)) {	case SQL_SUCCESS_WITH_INFO:		rep.ReportErrors();	case SQL_SUCCESS: break;	case SQL_ERROR:		rep.ReportErrors();	default: return false;	}		        switch(SQLExecute(cmd)) {    case SQL_NEED_DATA:        return true;    case SQL_SUCCESS_WITH_INFO:    case SQL_ERROR:        rep.ReportErrors();    default:        return false;    }}static bool ODBC_xSendDataGetId(SQLHSTMT cmd, SQLPOINTER* id,                                 CODBC_Reporter& rep){    switch(SQLParamData(cmd, id)) {    case SQL_NEED_DATA:        return true;    case SQL_SUCCESS_WITH_INFO:    case SQL_ERROR:        rep.ReportErrors();    default:        return false;    }}bool CODBC_Connection::x_SendData(SQLHSTMT cmd, CDB_Stream& stream, CODBC_Reporter& rep){    char buff[1801];    size_t s;    while((s= stream.Read(buff, sizeof(buff))) != 0) {        switch(SQLPutData(cmd, (SQLPOINTER)buff, (SQLINTEGER)s)) {        case SQL_SUCCESS_WITH_INFO:            rep.ReportErrors();        case SQL_NEED_DATA:			continue;        case SQL_NO_DATA:			return true;        case SQL_SUCCESS:            break;        case SQL_ERROR:            rep.ReportErrors();        default:            return false;        }    }    switch(SQLParamData(cmd, (SQLPOINTER*)&s)) {	case SQL_SUCCESS_WITH_INFO: rep.ReportErrors();    case SQL_SUCCESS:           break;	case SQL_NO_DATA:           return true;    case SQL_NEED_DATA: 	    throw CDB_ClientEx(eDB_Error, 410044, "CODBC_Connection::SendData",                               "Not all the data were sent");	case SQL_ERROR:             rep.ReportErrors();	default:		throw CDB_ClientEx(eDB_Error, 410045, "CODBC_Connection::SendData",                           "SQLParamData failed");	}	    for(;;) {        switch(SQLMoreResults(cmd)) {        case SQL_SUCCESS_WITH_INFO: rep.ReportErrors();        case SQL_SUCCESS:           continue;        case SQL_NO_DATA:           break;        case SQL_ERROR:                         rep.ReportErrors();            throw CDB_ClientEx(eDB_Error, 410014, "CODBC_Connection::SendData",                               "SQLMoreResults failed");        default:            throw CDB_ClientEx(eDB_Error, 410015, "CODBC_Connection::SendData",                               "SQLMoreResults failed (memory corruption suspected)");        }		break;    }    return true;}        void CODBC_Connection::ODBC_SetTimeout(SQLUINTEGER nof_secs) {}void CODBC_Connection::ODBC_SetTextImageSize(SQLUINTEGER nof_bytes) {}/////////////////////////////////////////////////////////////////////////////////  CODBC_SendDataCmd:://CODBC_SendDataCmd::CODBC_SendDataCmd(CODBC_Connection* conn,                                      SQLHSTMT cmd,                                      CDB_ITDescriptor& descr,                                     size_t nof_bytes, bool logit) :    m_Connect(conn), m_Cmd(cmd), m_Bytes2go(nof_bytes),    m_Reporter(&conn->m_MsgHandlers, SQL_HANDLE_STMT, cmd){    SQLPOINTER p= (SQLPOINTER)1;    if((!ODBC_xSendDataPrepare(cmd, descr, (SQLINTEGER)nof_bytes,                              false, logit, p, m_Reporter)) ||       (!ODBC_xSendDataGetId(cmd, &p, m_Reporter))) {        throw CDB_ClientEx(eDB_Error, 410035, "CODBC_SendDataCmd::CODBC_SendDataCm",                           "can not prepare a command");    }   }size_t CODBC_SendDataCmd::SendChunk(const void* chunk_ptr, size_t nof_bytes){    if(nof_bytes > m_Bytes2go) nof_bytes= m_Bytes2go;    if(nof_bytes < 1) return 0;    switch(SQLPutData(m_Cmd, (SQLPOINTER)chunk_ptr, (SQLINTEGER)nof_bytes)) {    case SQL_SUCCESS_WITH_INFO:        m_Reporter.ReportErrors();    case SQL_NEED_DATA:    case SQL_NO_DATA:    case SQL_SUCCESS:        m_Bytes2go-= nof_bytes;        if(m_Bytes2go == 0) break;        return nof_bytes;    case SQL_ERROR:        m_Reporter.ReportErrors();    default:        return 0;    }    size_t s;    switch(SQLParamData(m_Cmd, (SQLPOINTER*)&s)) {	case SQL_SUCCESS_WITH_INFO: m_Reporter.ReportErrors();    case SQL_SUCCESS:           break;	case SQL_NO_DATA:           break;    case SQL_NEED_DATA: 	    throw CDB_ClientEx(eDB_Error, 410044, "CODBC_Connection::SendChunk",                               "Not all the data were sent");	case SQL_ERROR:             m_Reporter.ReportErrors();	default:		throw CDB_ClientEx(eDB_Error, 410045, "CODBC_Connection::SendChunk",                           "SQLParamData failed");	}    for(;;) {        switch(SQLMoreResults(m_Cmd)) {        case SQL_SUCCESS_WITH_INFO: m_Reporter.ReportErrors();        case SQL_SUCCESS:           continue;        case SQL_NO_DATA:           break;        case SQL_ERROR:                         m_Reporter.ReportErrors();            throw CDB_ClientEx(eDB_Error, 410014, "CODBC_SendDataCmd::SendChunk",                               "SQLMoreResults failed");        default:            throw CDB_ClientEx(eDB_Error, 410015, "CODBC_SendDataCmd::SendChunk",                               "SQLMoreResults failed (memory corruption suspected)");        }		break;    }    return nof_bytes;}void CODBC_SendDataCmd::Release(){    m_BR = 0;    if (m_Bytes2go > 0) {        xCancel();        m_Bytes2go = 0;    }    m_Connect->DropCmd(*this);    delete this;}CODBC_SendDataCmd::~CODBC_SendDataCmd(){    if (m_Bytes2go > 0)        xCancel();    if (m_BR)        *m_BR = 0;    SQLFreeHandle(SQL_HANDLE_STMT, m_Cmd);}void CODBC_SendDataCmd::xCancel(){    switch(SQLFreeStmt(m_Cmd, SQL_CLOSE)) {    case SQL_SUCCESS_WITH_INFO: m_Reporter.ReportErrors();    case SQL_SUCCESS:           break;    case SQL_ERROR:             m_Reporter.ReportErrors();    default:                    return;    }    SQLFreeStmt(m_Cmd, SQL_RESET_PARAMS);}END_NCBI_SCOPE/* * =========================================================================== * $Log: connection.cpp,v $ * Revision 1000.1  2004/06/01 19:21:40  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5 * * Revision 1.5  2004/05/17 21:16:05  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.4  2003/06/05 16:02:04  soussov * adds code for DumpResults and for the dumped results processing * * Revision 1.3  2003/05/05 20:47:45  ucko * Check HAVE_ODBCSS_H; regardless, disable BCP on Unix, since even * DataDirect's implementation lacks the relevant bcp_* functions. * * Revision 1.2  2002/07/05 20:47:56  soussov * fixes bug in SendData * * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -