📄 bcp.cpp
字号:
break; case eDB_Binary: { CDB_Binary& val = dynamic_cast<CDB_Binary&> (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 : (Int4) val.Size(), i + 1) == SUCCEED ? SUCCEED : FAIL; } break; case eDB_VarBinary: { CDB_VarBinary& val = dynamic_cast<CDB_VarBinary&> (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 : (Int4) val.Size(), i + 1) == SUCCEED ? SUCCEED : FAIL; } break; case eDB_LongBinary: { CDB_LongBinary& val = dynamic_cast<CDB_LongBinary&> (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 : (Int4) val.DataSize(), i + 1) == SUCCEED ? SUCCEED : FAIL; } break; case eDB_Float: { CDB_Float& val = dynamic_cast<CDB_Float&> (param); //DBREAL v = (DBREAL) val.Value(); r = bcp_colptr(m_Cmd, (BYTE*) val.BindVal(), i + 1) == SUCCEED && bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : sizeof(float), i + 1) == SUCCEED ? SUCCEED : FAIL; } break; case eDB_Double: { CDB_Double& val = dynamic_cast<CDB_Double&> (param); //DBFLT8 v = (DBFLT8) val.Value(); r = bcp_colptr(m_Cmd, (BYTE*) val.BindVal(), i + 1) == SUCCEED && bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : sizeof(double), i + 1) == SUCCEED ? SUCCEED : FAIL; } break; case eDB_SmallDateTime: { CDB_SmallDateTime& val = dynamic_cast<CDB_SmallDateTime&> (param); DBDATETIM4* dt = (DBDATETIM4*) pb; DBDATETIME4_days(dt) = val.GetDays(); DBDATETIME4_mins(dt) = val.GetMinutes(); r = bcp_colptr(m_Cmd, (BYTE*) dt, i + 1) == SUCCEED && bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : sizeof(DBDATETIM4), i + 1) == SUCCEED ? SUCCEED : FAIL; pb = (void*) (dt + 1); } break; case eDB_DateTime: { CDB_DateTime& val = dynamic_cast<CDB_DateTime&> (param); DBDATETIME* dt = (DBDATETIME*) pb; dt->dtdays = val.GetDays(); dt->dttime = val.Get300Secs(); r = bcp_colptr(m_Cmd, (BYTE*) dt, i + 1) == SUCCEED && bcp_collen(m_Cmd, val.IsNULL() ? SQL_NULL_DATA : sizeof(DBDATETIME), i + 1) == SUCCEED ? SUCCEED : FAIL; pb = (void*) (dt + 1); } break; case eDB_Text: { CDB_Text& val = dynamic_cast<CDB_Text&> (param); r = bcp_collen(m_Cmd, (DBINT) val.Size(), i + 1); } break; case eDB_Image: { CDB_Image& val = dynamic_cast<CDB_Image&> (param); r = bcp_collen(m_Cmd, (DBINT) val.Size(), i + 1); } break; default: return false; } if (r != SUCCEED) { m_Reporter.ReportErrors(); return false; } } return true;}bool CODBC_BCPInCmd::SendRow(){ char param_buff[2048]; // maximal row size, assured of buffer overruns if (!x_AssignParams(param_buff)) { m_HasFailed = true; throw CDB_ClientEx(eDB_Error, 423004, "CODBC_BCPInCmd::SendRow", "cannot assign params"); } if (bcp_sendrow(m_Cmd) != SUCCEED) { m_HasFailed = true; m_Reporter.ReportErrors(); throw CDB_ClientEx(eDB_Error, 423005, "CODBC_BCPInCmd::SendRow", "bcp_sendrow failed"); } m_WasSent = true; if (m_HasTextImage) { // send text/image data char buff[1800]; // text/image page size for (unsigned int i = 0; i < m_Params.NofParams(); i++) { if (m_Params.GetParamStatus(i) == 0) continue; CDB_Object& param = *m_Params.GetParam(i); if (param.GetType() != eDB_Text && param.GetType() != eDB_Image) continue; CDB_Stream& val = dynamic_cast<CDB_Stream&> (param); size_t s = val.Size(); do { size_t l = val.Read(buff, sizeof(buff)); if (l > s) l = s; if (bcp_moretext(m_Cmd, (DBINT) l, (BYTE*) buff) != SUCCEED) { m_HasFailed = true; m_Reporter.ReportErrors(); throw CDB_ClientEx(eDB_Error, 423006, "CODBC_BCPInCmd::SendRow", param.GetType() == eDB_Text ? "bcp_moretext for text failed" : "bcp_moretext for image failed"); } if (!l) break; s -= l; } while (s); } } return true;}bool CODBC_BCPInCmd::Cancel(){ if(m_WasSent) { DBINT outrow = bcp_done(m_Cmd); m_WasSent= false; return outrow == 0; } return true;}bool CODBC_BCPInCmd::CompleteBatch(){ if(m_WasSent) { Int4 outrow = bcp_batch(m_Cmd); if(outrow == -1) { m_Reporter.ReportErrors(); return false; } return true; } return false;}bool CODBC_BCPInCmd::CompleteBCP(){ if(m_WasSent) { Int4 outrow = bcp_done(m_Cmd); m_WasSent= false; if(outrow == -1) { m_Reporter.ReportErrors(); return false; } return true; } return false;}void CODBC_BCPInCmd::Release(){ m_BR = 0; if (m_WasSent) { Cancel(); m_WasSent = false; } m_Connect->DropCmd(*this); delete this;}CODBC_BCPInCmd::~CODBC_BCPInCmd(){ if (m_BR) *m_BR = 0; if (m_WasSent) Cancel();}END_NCBI_SCOPE/* * =========================================================================== * $Log: bcp.cpp,v $ * Revision 1000.1 2004/06/01 19:21:37 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/05/08 20:30:24 soussov * CDB_LongChar CDB_LongBinary added * * Revision 1.3 2002/09/12 14:14:59 soussov * fixed typo in binding [var]char/binary with NULL value * * Revision 1.2 2002/09/11 20:23:54 soussov * fixed bug in binding [var]char/binary with NULL value * * Revision 1.1 2002/06/18 22:06:24 soussov * initial commit * * * =========================================================================== */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -