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

📄 bcp.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * =========================================================================== * PRODUCTION $Log: bcp.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:21:37  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5 * PRODUCTION * =========================================================================== *//* $Id: bcp.cpp,v 1000.1 2004/06/01 19:21:37 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Vladimir Soussov * * File Description:  ODBC bcp-in command * */#include <ncbi_pch.hpp>#include <dbapi/driver/odbc/interfaces.hpp>#include <dbapi/driver/util/numeric_convert.hpp>#include <string.h>#include <odbcss.h>BEGIN_NCBI_SCOPE#define DBDATETIME4_days(x) ((x)->numdays)#define DBDATETIME4_mins(x) ((x)->nummins)#define DBNUMERIC_val(x) ((x)->val)#define SQL_VARLEN_DATA (-10)/////////////////////////////////////////////////////////////////////////////////  CODBC_BCPInCmd:://CODBC_BCPInCmd::CODBC_BCPInCmd(CODBC_Connection* con,                               SQLHDBC       cmd,                               const string&    table_name,                               unsigned int     nof_columns) :    m_Connect(con), m_Cmd(cmd), m_Params(nof_columns),    m_WasSent(false), m_HasFailed(false),    m_HasTextImage(false), m_WasBound(false), 	m_Reporter(&con->m_MsgHandlers, SQL_HANDLE_DBC, cmd){    if (bcp_init(cmd, (char*) table_name.c_str(), 0, 0, DB_IN) != SUCCEED) {		m_Reporter.ReportErrors();        throw CDB_ClientEx(eDB_Fatal, 423001,                           "CODBC_BCPInCmd::CODBC_BCPInCmd", "bcp_init failed");    }}bool CODBC_BCPInCmd::Bind(unsigned int column_num, CDB_Object* param_ptr){    return m_Params.BindParam(column_num,  kEmptyStr, param_ptr);}bool CODBC_BCPInCmd::x_AssignParams(void* pb){    RETCODE r;        if (!m_WasBound) {        for (unsigned int i = 0; i < m_Params.NofParams(); i++) {            if (m_Params.GetParamStatus(i) == 0) {				bcp_bind(m_Cmd, (BYTE*) pb, 0, SQL_NULL_DATA, 0, 0, 0, i+1);                continue;			}                        CDB_Object& param = *m_Params.GetParam(i);                        switch ( param.GetType() ) {            case eDB_Int:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLINT4, i + 1);                break;            case eDB_SmallInt:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLINT2, i + 1);                break;            case eDB_TinyInt:                 r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLINT1, i + 1);                break;            case eDB_BigInt:                 r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLNUMERIC, i + 1);                break;            case eDB_Char:            case eDB_VarChar:			case eDB_LongChar:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA,(BYTE*) "", 1, SQLCHARACTER, i + 1);                break;#if 0            case eDB_VarChar:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA,(BYTE*) "", 1, SQLCHARACTER, i + 1);                break;            case eDB_Binary:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLBINARY, i + 1);                break;#endif            case eDB_Binary:            case eDB_VarBinary:			case eDB_LongBinary:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLBINARY, i + 1);                break;            case eDB_Float:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLFLT4, i + 1);                break;            case eDB_Double:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0,                             SQL_VARLEN_DATA, 0, 0, SQLFLT8, i + 1);                break;            case eDB_SmallDateTime:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0, SQL_VARLEN_DATA,                             0, 0, SQLDATETIM4,  i + 1);                break;            case eDB_DateTime:                r = bcp_bind(m_Cmd, (BYTE*) pb, 0, SQL_VARLEN_DATA,                             0, 0, SQLDATETIME, i + 1);                break;            case eDB_Text:                r = bcp_bind(m_Cmd, 0, 0,                             SQL_VARLEN_DATA, (BYTE*) "", 1, 							 SQLTEXT, i + 1);                m_HasTextImage = true;                break;            case eDB_Image:                r = bcp_bind(m_Cmd, 0, 0,                             1, 0, 0, SQLIMAGE, i + 1);                m_HasTextImage = true;                break;            default:                return false;            }            if (r != SUCCEED) {				m_Reporter.ReportErrors();                return false;			}        }        m_WasBound = true;    }    for (unsigned int i = 0; i < m_Params.NofParams(); i++) {        if (m_Params.GetParamStatus(i) == 0)            continue;                CDB_Object& param = *m_Params.GetParam(i);                switch ( param.GetType() ) {        case eDB_Int: {            CDB_Int& val = dynamic_cast<CDB_Int&> (param);            // DBINT v = (DBINT) val.Value();            r = bcp_colptr(m_Cmd, (BYTE*) val.BindVal(), i + 1)                == SUCCEED &&                bcp_collen(m_Cmd,  val.IsNULL() ? SQL_NULL_DATA : sizeof(Int4), i + 1)                == SUCCEED ? SUCCEED : FAIL;        }        break;        case eDB_SmallInt: {            CDB_SmallInt& val = dynamic_cast<CDB_SmallInt&> (param);            // DBSMALLINT v = (DBSMALLINT) val.Value();            r = bcp_colptr(m_Cmd, (BYTE*) val.BindVal(), i + 1)                == SUCCEED &&                bcp_collen(m_Cmd,  val.IsNULL() ? SQL_NULL_DATA : sizeof(Int2), i + 1)                == SUCCEED ? SUCCEED : FAIL;        }        break;        case eDB_TinyInt: {            CDB_TinyInt& val = dynamic_cast<CDB_TinyInt&> (param);            // DBTINYINT v = (DBTINYINT) val.Value();            r = bcp_colptr(m_Cmd, (BYTE*) val.BindVal(), i + 1)                == SUCCEED &&                bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : sizeof(Uint1), i + 1)                == SUCCEED ? SUCCEED : FAIL;        }        break;        case eDB_BigInt: {            CDB_BigInt& val = dynamic_cast<CDB_BigInt&> (param);            DBNUMERIC* v = (DBNUMERIC*) pb;            Int8 v8 = val.Value();            if (longlong_to_numeric(v8, 18, DBNUMERIC_val(v)) == 0)                return false;            r = bcp_colptr(m_Cmd, (BYTE*) v, i + 1)                == SUCCEED &&                bcp_collen(m_Cmd,  val.IsNULL() ? SQL_NULL_DATA : sizeof(DBNUMERIC), i + 1)                == SUCCEED ? SUCCEED : FAIL;            pb = (void*) (v + 1);        }        break;        case eDB_Char: {            CDB_Char& val = dynamic_cast<CDB_Char&> (param);            r = bcp_colptr(m_Cmd, (!val.IsNULL())? ((BYTE*) val.Value()) : (BYTE*)pb, i + 1)                == SUCCEED &&                bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : SQL_VARLEN_DATA, i + 1)                == SUCCEED ? SUCCEED : FAIL;        }        break;        case eDB_VarChar: {            CDB_VarChar& val = dynamic_cast<CDB_VarChar&> (param);            r = bcp_colptr(m_Cmd, (!val.IsNULL())? ((BYTE*) val.Value()) : (BYTE*)pb, i + 1)                == SUCCEED &&                bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : SQL_VARLEN_DATA, i + 1)                == SUCCEED ? SUCCEED : FAIL;        }        break;        case eDB_LongChar: {            CDB_LongChar& val = dynamic_cast<CDB_LongChar&> (param);            r = bcp_colptr(m_Cmd, (!val.IsNULL())? ((BYTE*) val.Value()) : (BYTE*)pb, i + 1)                == SUCCEED &&                bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : SQL_VARLEN_DATA, i + 1)                == SUCCEED ? SUCCEED : FAIL;        }

⌨️ 快捷键说明

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