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

📄 result.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    }    case SQL_TINYINT: {        SQLCHAR v;        switch (  item_buf->GetType()  ) {        case eDB_TinyInt:            outlen= xGetData(SQL_C_UTINYINT, &v, sizeof(SQLCHAR));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_TinyInt*)  item_buf) = (Uint1) v;            break;        case eDB_SmallInt:            outlen= xGetData(SQL_C_UTINYINT, &v, sizeof(SQLCHAR));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_SmallInt*) item_buf) = (Int2) v;            break;        case eDB_Int:            outlen= xGetData(SQL_C_UTINYINT, &v, sizeof(SQLCHAR));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_Int*)      item_buf) = (Int4) v;            break;        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_SMALLINT: {        SQLSMALLINT v;        switch (  item_buf->GetType()  ) {        case eDB_SmallInt:            outlen= xGetData(SQL_C_SSHORT, &v, sizeof(SQLSMALLINT));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_SmallInt*) item_buf) = (Int2) v;            break;        case eDB_Int:            outlen= xGetData(SQL_C_SSHORT, &v, sizeof(SQLSMALLINT));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_Int*) item_buf) = (Int4) v;            break;        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_INTEGER: {        SQLINTEGER v;        switch (  item_buf->GetType()  ) {        case eDB_Int:            outlen= xGetData(SQL_C_SLONG, &v, sizeof(SQLINTEGER));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_Int*) item_buf) = (Int4) v;            break;        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_DOUBLE:    case SQL_FLOAT: {        SQLDOUBLE v;        switch (  item_buf->GetType()  ) {        case eDB_Double:            outlen= xGetData(SQL_C_DOUBLE, &v, sizeof(SQLDOUBLE));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_Double*)      item_buf) = v;            break;        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_REAL: {        SQLREAL v;        switch (  item_buf->GetType()  ) {        case eDB_Float:            outlen= xGetData(SQL_C_FLOAT, &v, sizeof(SQLREAL));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_Float*)      item_buf) = v;            break;        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_BIGINT:    case SQL_DECIMAL:    case SQL_NUMERIC: {        switch (  item_buf->GetType()  ) {        case eDB_Numeric: {            SQL_NUMERIC_STRUCT v;			SQLHDESC hdesc;			SQLGetStmtAttr(m_Cmd, SQL_ATTR_APP_ROW_DESC,&hdesc, 0, NULL);			SQLSetDescField(hdesc,m_CurrItem+1,SQL_DESC_TYPE,(VOID*)SQL_C_NUMERIC,0);			SQLSetDescField(hdesc,m_CurrItem+1,SQL_DESC_PRECISION,					(VOID*)(m_ColFmt[m_CurrItem].ColumnSize),0);			SQLSetDescField(hdesc,m_CurrItem+1,SQL_DESC_SCALE,					(VOID*)(m_ColFmt[m_CurrItem].DecimalDigits),0);            outlen= xGetData(SQL_ARD_TYPE, &v, sizeof(SQL_NUMERIC_STRUCT));            if (outlen <= 0) item_buf->AssignNULL();            else xConvert2CDB_Numeric((CDB_Numeric*)item_buf, v);            break;        }        case eDB_BigInt: {            SQLBIGINT v;            outlen= xGetData(SQL_C_SBIGINT, &v, sizeof(SQLBIGINT));            if (outlen <= 0) item_buf->AssignNULL();            else *((CDB_BigInt*) item_buf) = (Int8) v;            break;        }        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    case SQL_WLONGVARCHAR:    case SQL_LONGVARBINARY:    case SQL_LONGVARCHAR: {        SQLINTEGER f;        switch(item_buf->GetType()) {        case eDB_Text: {            CDB_Stream* val = (CDB_Stream*) item_buf;            for(;;) {                switch(SQLGetData(m_Cmd, m_CurrItem+1, SQL_C_CHAR, buffer, sizeof(buffer), &f)) {                case SQL_SUCCESS_WITH_INFO:                    if(f == SQL_NO_TOTAL) f= sizeof(buffer) - 1;                    else if(f < 0) m_Reporter.ReportErrors();                case SQL_SUCCESS:                    if(f > 0) {                        if(f > sizeof(buffer)-1) f= sizeof(buffer)-1;                        val->Append(buffer, f);                    }                    continue;                case SQL_NO_DATA:                    break;                case SQL_ERROR:                    m_Reporter.ReportErrors();                default:                    throw CDB_ClientEx(eDB_Error, 430021, "CODBC_*Result::GetItem",                               "SQLGetData failed while retrieving text/image into CDB_Text");                }				break;            }            break;        }        case eDB_Image: {            CDB_Stream* val = (CDB_Stream*) item_buf;            for(;;) {                switch(SQLGetData(m_Cmd, m_CurrItem+1, SQL_C_BINARY, buffer, sizeof(buffer), &f)) {                case SQL_SUCCESS_WITH_INFO:                    if(f == SQL_NO_TOTAL || f > sizeof(buffer)) f= sizeof(buffer);                    else m_Reporter.ReportErrors();                case SQL_SUCCESS:                    if(f > 0) {                        if(f > sizeof(buffer)) f= sizeof(buffer);                        val->Append(buffer, f);                    }                    continue;                case SQL_NO_DATA:                    break;                case SQL_ERROR:                    m_Reporter.ReportErrors();                default:                    throw CDB_ClientEx(eDB_Error, 430022, "CODBC_*Result::GetItem",                               "SQLGetData failed while retrieving text/image into CDB_Image");                }				break;            }            break;        }        default:            throw CDB_ClientEx(eDB_Error, 430020, "CODBC_*Result::GetItem",                               "Wrong type of CDB_Object");        }        break;    }    default:        throw CDB_ClientEx(eDB_Error, 430025, "CODBC_*Result::GetItem",                               "Unsupported column type");    }    return item_buf;}CDB_Object* CODBC_RowResult::xMakeItem(){    char buffer[8*1024];    int outlen;    switch(m_ColFmt[m_CurrItem].DataType) {    case SQL_WCHAR:    case SQL_CHAR:    case SQL_VARCHAR:    case SQL_WVARCHAR: {        outlen= xGetData(SQL_C_CHAR, buffer, sizeof(buffer));		if(m_ColFmt[m_CurrItem].ColumnSize < 256) {			CDB_VarChar* val = (outlen < 0)				? new CDB_VarChar() : new CDB_VarChar(buffer, (size_t) outlen);			return val;		}		else {			CDB_LongChar* val = (outlen < 0)				? new CDB_LongChar(m_ColFmt[m_CurrItem].ColumnSize) :				new CDB_LongChar(m_ColFmt[m_CurrItem].ColumnSize,						buffer);			return val;		}    }    case SQL_BINARY:    case SQL_VARBINARY: {        outlen= xGetData(SQL_C_BINARY, buffer, sizeof(buffer));		if(m_ColFmt[m_CurrItem].ColumnSize < 256) {	        CDB_VarBinary* val = (outlen <= 0)		        ? new CDB_VarBinary() : new CDB_VarBinary(buffer, (size_t)outlen);			return val;		}		else {			CDB_LongBinary* val = (outlen < 0)				? new CDB_LongBinary(m_ColFmt[m_CurrItem].ColumnSize) :				new CDB_LongBinary(m_ColFmt[m_CurrItem].ColumnSize,						buffer, (size_t) outlen);			return val;		}    }    case SQL_BIT: {        SQLCHAR v;        outlen= xGetData(SQL_C_BIT, &v, sizeof(SQLCHAR));        return (outlen <= 0) ? new CDB_Bit() : new CDB_Bit((int) v);    }    case SQL_TYPE_TIMESTAMP: {        SQL_TIMESTAMP_STRUCT v;        outlen= xGetData(SQL_C_TYPE_TIMESTAMP, &v, sizeof(SQL_TIMESTAMP_STRUCT));        if (outlen <= 0) {            return new CDB_SmallInt();        }        else {            CTime t((int)v.year, (int)v.month, (int)v.day,                    (int)v.hour, (int)v.minute, (int)v.second,                    (long)v.fraction);            return new CDB_DateTime(t);        }    }    case SQL_TINYINT: {        SQLCHAR v;        outlen= xGetData(SQL_C_UTINYINT, &v, sizeof(SQLCHAR));        return (outlen <= 0) ? new CDB_TinyInt() : new CDB_TinyInt((Uint1) v);    }    case SQL_SMALLINT: {        SQLSMALLINT v;        outlen= xGetData(SQL_C_SSHORT, &v, sizeof(SQLSMALLINT));        return (outlen <= 0) ? new CDB_SmallInt() : new CDB_SmallInt((Int2) v);    }    case SQL_INTEGER: {        SQLINTEGER v;        outlen= xGetData(SQL_C_SLONG, &v, sizeof(SQLINTEGER));        return (outlen <= 0) ? new CDB_Int() : new CDB_Int((Int4) v);    }    case SQL_DOUBLE:    case SQL_FLOAT: {        SQLDOUBLE v;        outlen= xGetData(SQL_C_DOUBLE, &v, sizeof(SQLDOUBLE));        return (outlen <= 0) ? new CDB_Double() : new CDB_Double(v);    }    case SQL_REAL: {        SQLREAL v;        outlen= xGetData(SQL_C_FLOAT, &v, sizeof(SQLREAL));        return (outlen <= 0) ? new CDB_Float() : new CDB_Float(v);    }    case SQL_DECIMAL:    case SQL_NUMERIC: {        if((m_ColFmt[m_CurrItem].DecimalDigits > 0) ||           (m_ColFmt[m_CurrItem].ColumnSize > 20)) { // It should be numeric            SQL_NUMERIC_STRUCT v;            outlen= xGetData(SQL_C_NUMERIC, &v, sizeof(SQL_NUMERIC_STRUCT));            CDB_Numeric* r= new CDB_Numeric;            if(outlen > 0) {                xConvert2CDB_Numeric(r, v);            }                return r;        }        else { // It should be bigint            SQLBIGINT v;            outlen= xGetData(SQL_C_SBIGINT, &v, sizeof(SQLBIGINT));            return (outlen <= 0) ? new CDB_BigInt() : new CDB_BigInt((Int8) v);        }    }    case SQL_WLONGVARCHAR:    case SQL_LONGVARCHAR: {        CDB_Text* val = new CDB_Text;        SQLINTEGER f;        for(;;) {            switch(SQLGetData(m_Cmd, m_CurrItem+1, SQL_C_CHAR, buffer, sizeof(buffer), &f)) {            case SQL_SUCCESS_WITH_INFO:                if(f == SQL_NO_TOTAL) f= sizeof(buffer) - 1;                else if(f < 0) m_Reporter.ReportErrors();            case SQL_SUCCESS:                if(f > 0) {                    if(f > sizeof(buffer)-1) f= sizeof(buffer)-1;                    val->Append(buffer, f);                }                continue;            case SQL_NO_DATA:                break;            case SQL_ERROR:                m_Reporter.ReportErrors();            default:                throw CDB_ClientEx(eDB_Error, 430023, "CODBC_*Result::GetItem",                               "SQLGetData failed while retrieving text into CDB_Text");            }        }        return val;    }    case SQL_LONGVARBINARY: {        CDB_Image* val = new CDB_Image;        SQLINTEGER f;        for(;;) {            switch(SQLGetData(m_Cmd, m_CurrItem+1, SQL_C_BINARY, buffer, sizeof(buffer), &f)) {            case SQL_SUCCESS_WITH_INFO:                if(f == SQL_NO_TOTAL) f= sizeof(buffer);                else if(f < 0) m_Reporter.ReportErrors();            case SQL_SUCCESS:                if(f > 0) {                    if(f > sizeof(buffer)) f= sizeof(buffer);                    val->Append(buffer, f);                }                continue;            case SQL_NO_DATA:                break;            case SQL_ERROR:                m_Reporter.ReportErrors();            default:                throw CDB_ClientEx(eDB_Error, 430024, "CODBC_*Result::GetItem",                                   "SQLGetData failed while retrieving image into CDB_Image");            }        }        return val;    }    default:        throw CDB_ClientEx(eDB_Error, 430025, "CODBC_*Result::GetItem",

⌨️ 快捷键说明

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