📄 clsadooperater.cpp
字号:
ccvar.Detach(pszFieldName);
ccvar.Clear();
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "";
ccvar.Detach(pszFieldName);
ccvar.Clear();
ccvar = "";
ccvar.Detach(pszFieldValue);
ccvar.Clear();
::SysFreeString(szMainID);
::SysFreeString(szFromIndex);
::SysFreeString(szLength);
return S_FALSE;
}
::SysFreeString(szMainID);
::SysFreeString(szFromIndex);
::SysFreeString(szLength);
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
return S_OK;
}
STDMETHODIMP CClsAdoOperater::PKInsertLog(BSTR szWorkID, BSTR szCallPhone, BSTR szBusiPhone, BSTR szPhoneXh, BSTR szWorkType, BSTR szFlm, BSTR szKeyWords, BSTR szOtherInfo, VARIANT *plRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
std::string m_strProcedureName = "PK_query.insertlog";
db::ParamStruct m_parameters[9];
int iParaCount = 9;
//话务员工号
SetParaContent(m_parameters[0],db::PT_IN,
_com_util::ConvertBSTRToString(szWorkID),db::DT_STRING,"");
//主叫号码
SetParaContent(m_parameters[1],db::PT_IN,
_com_util::ConvertBSTRToString(szCallPhone),db::DT_STRING,"");
//被叫号码
SetParaContent(m_parameters[2],db::PT_IN,
_com_util::ConvertBSTRToString(szBusiPhone),db::DT_STRING,"");
//被叫号码序号
SetParaContent(m_parameters[3],db::PT_IN,
_com_util::ConvertBSTRToString(szPhoneXh),db::DT_STRING,"");
//报号类型
SetParaContent(m_parameters[4],db::PT_IN,
_com_util::ConvertBSTRToString(szWorkType),db::DT_STRING,"");
//分类码
SetParaContent(m_parameters[5],db::PT_IN,
_com_util::ConvertBSTRToString(szFlm),db::DT_STRING,"");
//关键词信息
SetParaContent(m_parameters[6],db::PT_IN,
_com_util::ConvertBSTRToString(szKeyWords),db::DT_STRING,"");
//备注1
SetParaContent(m_parameters[7],db::PT_IN,
_com_util::ConvertBSTRToString(szOtherInfo),db::DT_STRING,"");
//返回结果1=成功;0=失败;
SetParaContent(m_parameters[8],db::PT_OUT,"",db::DT_INT,"");
// 2. 产生执行存储过程的sql语句
std::string sql = g_DbDriver->GenStoredProcedureSql(m_strProcedureName,iParaCount);
// 3. 编译sql
try
{
g_pStmt = g_pConn->PrepareCall(sql);
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// //g_dbStatProbe.SetOff(m_strDSN);
//
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "-1";
ccvar.Detach(plRet);
ccvar.Clear();
::SysFreeString(szWorkID);
::SysFreeString(szCallPhone);
::SysFreeString(szBusiPhone);
::SysFreeString(szPhoneXh);
::SysFreeString(szWorkType);
::SysFreeString(szFlm);
::SysFreeString(szKeyWords);
::SysFreeString(szOtherInfo);
return S_FALSE;
}
// 4. 设置输入参数并注册输出参数
try
{
SetInputAndRegOuput(g_pStmt,m_parameters,iParaCount);
}
catch (const db::SqlException &e)
{
//置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "-1";
ccvar.Detach(plRet);
ccvar.Clear();
::SysFreeString(szWorkID);
::SysFreeString(szCallPhone);
::SysFreeString(szBusiPhone);
::SysFreeString(szPhoneXh);
::SysFreeString(szWorkType);
::SysFreeString(szFlm);
::SysFreeString(szKeyWords);
::SysFreeString(szOtherInfo);
return S_FALSE;
}
// 5. execute
try
{
g_pStmt->Execute();
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "-1";
ccvar.Detach(plRet);
ccvar.Clear();
::SysFreeString(szWorkID);
::SysFreeString(szCallPhone);
::SysFreeString(szBusiPhone);
::SysFreeString(szPhoneXh);
::SysFreeString(szWorkType);
::SysFreeString(szFlm);
::SysFreeString(szKeyWords);
::SysFreeString(szOtherInfo);
return S_FALSE;
}
CComVariant ccvar;
// 6. 取输出参数
try
{
GetProcResult(g_pStmt,m_parameters,iParaCount);
ccvar = m_parameters[8].paramValue.c_str();
ccvar.Detach(plRet);
ccvar.Clear();
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "-1";
ccvar.Detach(plRet);
ccvar.Clear();
::SysFreeString(szWorkID);
::SysFreeString(szCallPhone);
::SysFreeString(szBusiPhone);
::SysFreeString(szPhoneXh);
::SysFreeString(szWorkType);
::SysFreeString(szFlm);
::SysFreeString(szKeyWords);
::SysFreeString(szOtherInfo);
return S_FALSE;
}
::SysFreeString(szWorkID);
::SysFreeString(szCallPhone);
::SysFreeString(szBusiPhone);
::SysFreeString(szPhoneXh);
::SysFreeString(szWorkType);
::SysFreeString(szFlm);
::SysFreeString(szKeyWords);
::SysFreeString(szOtherInfo);
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
return S_OK;
}
void SetParameter(db::ICallableStatement * pStmt, int index,
db::DataType type, const std::string &value)
{
switch(type) {
case db::DT_STRING:
pStmt->SetString( index, value);
break;
case db::DT_INT:
pStmt->SetInt(index, atoi(value.c_str()));
break;
//default:
}
}
void SetInputAndRegOuput(db::ICallableStatement * pStmt,
db::ParamStruct *pPara,int iParaCount)
{
for(int i = 0; i < iParaCount; ++i)
{
db::ParamStruct ps = *pPara;
switch(ps.paramType)
{
case db::PT_IN:
SetParameter(pStmt, i + 1, ps.dataType, ps.paramValue);
break;
case db::PT_OUT:
pStmt->RegisterOutParameter(i + 1, ps.dataType);
break;
case db::PT_IN_OUT:
SetParameter(pStmt, i + 1, ps.dataType, ps.paramValue);
pStmt->RegisterOutParameter(i + 1, ps.dataType);
break;
}
pPara++;
}
}
void GetProcResult(db::ICallableStatement * pStmt,
db::ParamStruct *pPara,int iParaCount)
{
for(int i = 0; i < iParaCount; ++i)
{
db::ParamStruct ps = *pPara;
switch(ps.paramType)
{
case db::PT_OUT:
case db::PT_IN_OUT:
{
switch(ps.dataType)
{
case db::DT_STRING :
if (!pStmt->GetString(i + 1, ps.paramValue))
ps.paramValue.erase();
pPara->paramValue = ps.paramValue;
break;
case db::DT_INT :
int iVal;
if (pStmt->GetInt(i + 1, iVal))
{
char szTmp[20];
sprintf(szTmp, "%d", iVal);
ps.paramValue = szTmp;
pPara->paramValue = ps.paramValue;
}
else
ps.paramValue.erase();
break;
case db::DT_TIMESTAMP :
db::Timestamp ts;
if (pStmt->GetTimestamp(i + 1, ts))
{
ps.paramValue = ts.ToString();
pPara->paramValue = ps.paramValue;
}
else
ps.paramValue.erase();
break;
}
}
break;
}
pPara++;
}
}
void SetParaContent(db::ParamStruct ¶,db::ParamType paraType,
const std::string& strParavalue,
db::DataType datatype,const std::string& strDataname)
{
para.paramType = paraType;
para.paramValue = strParavalue;
para.paramName = strDataname;
para.dataType = datatype;
}
STDMETHODIMP CClsAdoOperater::PKGetGroup(BSTR szBhType, BSTR szTableId,
BSTR szXh, BSTR szKeyWords,
VARIANT *pszGroupInfo,
VARIANT *plGroupNum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
std::string m_strProcedureName = "PK_query.get_group";
db::ParamStruct m_parameters[6];
int iParaCount = 6;
//OCIDBDriver oci;
std::string strBhType = _com_util::ConvertBSTRToString(szBhType);
std::string strTableId = _com_util::ConvertBSTRToString(szTableId);
std::string strXh = _com_util::ConvertBSTRToString(szXh);
std::string strKeyWords = _com_util::ConvertBSTRToString(szKeyWords);
//[in]报号类型
SetParaContent(m_parameters[0],db::PT_IN,strBhType,db::DT_STRING,"");
//[in]表名标示
SetParaContent(m_parameters[1],db::PT_IN,strTableId,db::DT_STRING,"");
//[in]序号
SetParaContent(m_parameters[2],db::PT_IN,strXh,db::DT_STRING,"");
//[in]关键词
SetParaContent(m_parameters[3],db::PT_IN,strKeyWords,db::DT_STRING,"");
//[out]组信息(多家多组,包括每家的序号,和其业务标志)
SetParaContent(m_parameters[4],db::PT_OUT,"",db::DT_STRING,"");
//[out]组个数
SetParaContent(m_parameters[5],db::PT_OUT,"",db::DT_STRING,"");
// 2. 产生执行存储过程的sql语句
std::string sql = g_DbDriver->GenStoredProcedureSql(m_strProcedureName,iParaCount);
// 3. 编译sql
try
{
g_pStmt = g_pConn->PrepareCall(sql);
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// //g_dbStatProbe.SetOff(m_strDSN);
//
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "";
ccvar.Detach(pszGroupInfo);
ccvar.Clear();
ccvar = "-1";
ccvar.Detach(plGroupNum);
ccvar.Clear();
::SysFreeString(szBhType);
::SysFreeString(szTableId);
::SysFreeString(szXh);
::SysFreeString(szKeyWords);
return S_FALSE;
}
// 4. 设置输入参数并注册输出参数
try
{
SetInputAndRegOuput(g_pStmt,m_parameters,iParaCount);
}
catch (const db::SqlException &e)
{
//置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "";
ccvar.Detach(pszGroupInfo);
ccvar.Clear();
ccvar = "-2";
ccvar.Detach(plGroupNum);
ccvar.Clear();
::SysFreeString(szBhType);
::SysFreeString(szTableId);
::SysFreeString(szXh);
::SysFreeString(szKeyWords);
return S_FALSE;
}
// 5. execute
try
{
g_pStmt->Execute();
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
//ccvar = "";
ccvar = e.GetDescription().c_str();
ccvar.Detach(pszGroupInfo);
ccvar.Clear();
ccvar = "-3";
ccvar.Detach(plGroupNum);
ccvar.Clear();
::SysFreeString(szBhType);
::SysFreeString(szTableId);
::SysFreeString(szXh);
::SysFreeString(szKeyWords);
return S_FALSE;
}
// 6. 取输出参数
try
{
GetProcResult(g_pStmt,m_parameters,iParaCount);
CComVariant ccvar;
ccvar = m_parameters[4].paramValue.c_str();
ccvar.Detach(pszGroupInfo);
ccvar.Clear();
ccvar = m_parameters[5].paramValue.c_str();
ccvar.Detach(plGroupNum);
ccvar.Clear();
}
catch (const db::SqlException &e)
{
// //置数据库状态为Off
// g_dbStatProbe.SetOff(m_strDSN);
//
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
CComVariant ccvar;
ccvar = "";
ccvar.Detach(pszGroupInfo);
ccvar.Clear();
ccvar = "-4";
ccvar.Detach(plGroupNum);
ccvar.Clear();
::SysFreeString(szBhType);
::SysFreeString(szTableId);
::SysFreeString(szXh);
::SysFreeString(szKeyWords);
return S_FALSE;
}
::SysFreeString(szBhType);
::SysFreeString(szTableId);
::SysFreeString(szXh);
::SysFreeString(szKeyWords);
//释放ICallableStatement
g_pStmt->Close();
//释放连接
g_pConn->Close();
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -