资源描述
// callOmronproduce.cpp : Defines the entry point for the console application.
// VC++控制存储过程
#include "stdafx.h"
#include <iostream>
#include <string>
#include <time.h>
#include <fstream>
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
using namespace std;
//获得系统日期
long getSystemDate()
{
time_t timer;
time(&timer);
tm* t_tm = localtime(&timer);
int sysyear = t_tm->tm_year+1900;
int sysmonth = t_tm->tm_mon+1;
int sysday = t_tm->tm_mday;
int sysminiute = t_tm->tm_min;
int syssecond = t_tm->tm_sec;
long date;
date = sysyear*10000+sysmonth*100+sysday;
return date;
}
///调用omron_edw存储过程
string Call_Omron_edw_Produce(long sysdate)
{
//初始化COM库(调用msado15.dll为COM库调用方式)
::CoInitialize(NULL);
string temp;
try
{
//初始化ADO三个基本接口;
_CommandPtr m_pCmd;
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
// 设置连接字符串,为是BSTR型或者_bstr_t类型
_bstr_t strConnect,bstrSQL;
//连接字符串说明:Provider表示驱动引擎;Data Source表示数据库文件名及其完整路径;
strConnect= "Provider=OraOLEDB.ORACLE.1;Persist Security Info=TRUE;Data Source=10.110.50.103/RELEASE;User ID=OMRON_EDW;Password=OMRON_EDW;";
//strConnect= "Provider=MSDAORA;Persist Security Info=TRUE;Data Source=10.110.50.103/RELEASE;User ID=OMRON_EDW;Password=OMRON_EDW;";
// 创建Connection对象
// 利用_ConnectionPtr这个智能指针构造对象pConn,调用其中的Connection定义
m_pConnection.CreateInstance(__uuidof(Connection));
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 创建CommandPtr对象
m_pCmd.CreateInstance(__uuidof(Command));
m_pConnection->CursorLocation = adUseClient;
m_pConnection->Mode = adModeReadWrite;
m_pConnection->ConnectionTimeout = 3;
m_pConnection->CommandTimeout = 3;
m_pConnection->ConnectionString = strConnect;
//打开数据库连接
//连接字符串说明:Provider表示驱动引擎;User ID表示用户名;Password表示口令;Initial Catalog表示数据库名
m_pConnection->Open(strConnect,"OMRON_EDW","OMRON_EDW",adModeUnknown);
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
else
{
cout <<"EDW数据库连接成功"<<endl;
cout <<"EDW数据跑批正在进行..."<<endl;
}
_ParameterPtr lPara0= m_pCmd->CreateParameter(_bstr_t("p_etldate"),adVarChar,adParamInput,60);
lPara0->PutValue(_variant_t(sysdate));
m_pCmd->Parameters->Append(lPara0);
_ParameterPtr lPara1= m_pCmd->CreateParameter(_bstr_t("O_RUNSTATUS"),adVarChar,adParamOutput,60);
lPara1->Value=_bstr_t(" ");
m_pCmd->Parameters->Append(lPara1);
m_pCmd->CommandText=_bstr_t("BATCH_EDW_CTL_DAILY");
///需要使用的ADO连接
m_pCmd->CommandType=adCmdStoredProc;
m_pCmd->ActiveConnection = m_pConnection;
m_pRecordset = m_pCmd->Execute(NULL,NULL,adCmdStoredProc);
//返回存储过程的返回值
_bstr_t v_return,v_text;
v_return = m_pCmd->Parameters->GetItem("O_RUNSTATUS")->GetValue();
temp = (string)(_bstr_t)v_return;
//释放COM库
::CoUninitialize();
return temp;
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
cerr << "\nERROR:" << (char*)e.Description();//抛出异常
::CoUninitialize();
return temp;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//调用omron_mart存储过程
string Call_Omron_mart_Produce(long sysdate)
{
::CoInitialize(NULL);
string temp;
try
{
//初始化ADO三个基本接口;
_CommandPtr m_pCmd;
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
// 设置连接字符串,为是BSTR型或者_bstr_t类型
_bstr_t strConnect,bstrSQL;
strConnect= "Provider=OraOLEDB.ORACLE.1;Persist Security Info=TRUE;Data Source=10.110.50.103/RELEASE;User ID=OMRON_MART;Password=OMRON_MART;";
//strConnect= "Provider=MSDAORA.1;Persist Security Info=TRUE;Data Source=10.110.50.103/RELEASE;User ID=OMRON_MART;Password=OMRON_MART;";
// 创建Connection对象
m_pConnection.CreateInstance(__uuidof(Connection));
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 创建CommandPtr对象
m_pCmd.CreateInstance(__uuidof(Command));
m_pConnection->CursorLocation = adUseClient;
m_pConnection->Mode = adModeReadWrite;
m_pConnection->ConnectionTimeout = 3;
m_pConnection->CommandTimeout = 3;
m_pConnection->ConnectionString = strConnect;
//打开数据库连接
m_pConnection->Open(strConnect,"OMRON_MART","OMRON_MART",adModeUnknown);
if(m_pConnection==NULL)
{
cerr<<"Lind data ERROR!\n";
}
else
{
cout <<"EDW数据跑批完成"<<endl;
cout <<"MART数据库连接成功"<<endl;
cout <<"MART数据跑批正在进行..."<<endl;
}
_ParameterPtr lPara0= m_pCmd->CreateParameter(_bstr_t("p_etldate"),adVarChar,adParamInput,60);
lPara0->PutValue(_variant_t(sysdate));
m_pCmd->Parameters->Append(lPara0);
_ParameterPtr lPara1= m_pCmd->CreateParameter(_bstr_t("O_RUNSTATUS"),adVarChar,adParamOutput,60);
//lPara1->Value=_bstr_t(" ");
m_pCmd->Parameters->Append(lPara1);
// MART跑批
m_pCmd->CommandText=_bstr_t("BATCH_MART_CTL_DAILY");
///需要使用的ADO连接
m_pCmd->CommandType=adCmdStoredProc;
m_pCmd->ActiveConnection = m_pConnection;
m_pRecordset = m_pCmd->Execute(NULL,NULL,adCmdStoredProc);
cout <<"MART数据跑批完成"<<endl;
cout <<"------------------"<<endl;
cout <<"全部数据跑批完成"<<endl;
////////////////////////
_bstr_t v_return,v_text;
v_return = m_pCmd->Parameters->GetItem("O_RUNSTATUS")->GetValue();
temp = (string)(_bstr_t)v_return;
::CoUninitialize();
return temp;
//m_pCmd.Detach();
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
cerr << "\nERROR:" << (char*)e.Description();//抛出异常
::CoUninitialize();
return temp;
}
}
void Logdetail(string logname)
{
// 取当前系统时间
////////////////////////////////////////////////////////////////////////////////
time_t timer;
time(&timer);
tm* t_tm = localtime(&timer);
int syshour = t_tm->tm_hour;
int sysminiute = t_tm->tm_min;
int syssecond = t_tm->tm_sec;
long sysdate = getSystemDate();
char sysdatechar[13];
memset(sysdatechar,0,13);
ltoa(sysdate,sysdatechar,10);
sysdatechar[8]='.';
sysdatechar[9]='l';
sysdatechar[10]='o';
sysdatechar[11]='g';
sysdatechar[12]='\0';
ofstream ofs(sysdatechar,ios::app);
if(sysminiute<10)
{
ofs<<sysdate<<" "<<syshour<<":"<<"0"<<sysminiute<<":"<<syssecond<<logname<<endl;
ofs<<" "<<endl;
}
else if(syssecond<10)
{
ofs<<sysdate<<" "<<syshour<<":"<<sysminiute<<":"<<"0"<<syssecond<<logname<<endl;
ofs<<" "<<endl;
}
else
{
ofs<<sysdate<<" "<<syshour<<":"<<sysminiute<<":"<<syssecond<<logname<<endl;
ofs<<" "<<endl;
}
ofs.close();
}
int main(int argc, char* argv[])
{
string edw;
string mart;
string zero = "0";
long sysdate = getSystemDate();
///////////////////////////////////////edw
Logdetail("EDW数据跑批开始");
edw = Call_Omron_edw_Produce(sysdate);
//cout<<edw<<"dddd"<<endl;
if(edw == zero)
Logdetail("EDW数据跑批完成");
else
{
Logdetail("EDW数据跑批失败");
return 0;
}
/////////////////////////////////////mart
//Logdetail(edw);
Logdetail("MART数据跑批开始");
mart = Call_Omron_mart_Produce(sysdate);
//cout<<mart<<"dddd"<<endl;
if(mart == zero)
Logdetail("MART数据跑批完成");
else
{
Logdetail("MART数据跑批失败");
return 0;
}
//Logdetail(mart);
return 1;
}
展开阅读全文