📄 smsado.cpp
字号:
// SMSADO.cpp: implementation of the CSMSADO class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "sms.h"
#include "SMSADO.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
inline void TESTHRESULT(HRESULT x) {if FAILED(x) _com_issue_error(x);};
inline void Trim(CString& str)
{
CString temp=str;
temp.TrimLeft();
temp.TrimRight();
str=temp;
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSMSADO::CSMSADO()
{
CoInitialize(NULL);//初始化COM组件
m_Connection.CreateInstance(__uuidof(Connection));//创建一个ADO连接实例
m_Connection->ConnectionTimeout=5;
m_Connection->CommandTimeout=5;
}
CSMSADO::~CSMSADO()
{
}
HRESULT CSMSADO::ConnectServer(CString pServerName,CString pUserName,CString pPassWord)
{
CString ConnStr;
HRESULT hresult=0;
//Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=POS;password=POS;Data Source=ORACLE;
ConnStr.Format("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=%s;password=%s;Data Source=%s;"
,pUserName
,pPassWord
,pServerName);
_bstr_t _bstrConnStr=ConnStr;
try
{
hresult=m_Connection->Open(_bstrConnStr,"","",NULL);
if(SUCCEEDED(hresult))
{
m_IsAdoConSuc=TRUE;
}
}
catch (_com_error & e)
{
TRACE(e.ErrorMessage());
hresult=-1;
m_IsAdoConSuc=FALSE;
TRACE("数据库连接不成功");
}
catch (...)
{
m_IsAdoConSuc=FALSE;
hresult=-1;
TRACE("数据库连接不成功\n");
}
TRACE("连接数据库成功\n");
return hresult;
}
SQLRECORDSET CSMSADO::ExecuteWithRecordset(CString SQLStr)
{
SQLRECORDSET rs=NULL;
try{
if (!m_IsAdoConSuc)
return NULL;
TESTHRESULT(rs.CreateInstance(__uuidof(Recordset)));//记录集智能指针对象,在使用时,要先调用CreateInstance函数
rs->PutCursorLocation(adUseClient);
VARIANT var;
var.vt = VT_I4;
_bstr_t _bstrSql(SQLStr);
rs=m_Connection->Execute(_bstrSql,&var,adCmdUnknown); //第一个参数为查询语句,第二参数为存放引影记录条变量的指针,第三个参数为ado选项
//rs=m_Connection->Execute(bSql,&var,Options);
}
catch(_com_error &e)
{
//ReportComErr(e,csSql,ShowErrMsg);
HRESULT ec=e.Error();
if(ec==E_FAIL||ec==adErrObjectNotSet)//如果由于网络错误,断开当前连接
m_IsAdoConSuc=FALSE;
return NULL;
}
return rs;
}
long CSMSADO::ExecuteWithoutRecordset(CString SQLStr)
{
try{
if (!m_IsAdoConSuc)
return 0;
VARIANT var;
var.vt = VT_I4;
_bstr_t _bstrSql(SQLStr);
//第一个参数为查询语句,第二参数为存放引影记录条变量的指针,第三个参数为ado选项
m_Connection->Execute(_bstrSql,&var,adCmdUnspecified);
long ec=var.lVal;
return ec;
}
catch(_com_error &e)
{
//ReportComErr(e,csSql,ShowErrMsg);
HRESULT ec=e.Error();
if(ec==adErrObjectNotSet)//如果由于网络错误,断开当前连接
m_IsAdoConSuc=FALSE;
return -1;
}
return 0;
}
int CSMSADO::GetIntegerFieldVal(SQLRECORDSET prs, CString pFieldName)
{
_variant_t var_t;
var_t=prs->GetFields()->GetItem((LPCTSTR)pFieldName)->GetValue();
int result=0;
switch(var_t.vt)
{
case VT_I2:{result=var_t.iVal;break;}
case VT_I4:{result=var_t.lVal;break;}
case VT_INT:{result=var_t.intVal;break;}
case VT_UINT:{result=var_t.uintVal;break;}
case VT_UI2:{result=var_t.uiVal;break;}
case VT_UI4:{result=var_t.ulVal;break;}
case VT_DECIMAL:{result=var_t.ulVal;break;}
}
return result;
}
double CSMSADO::GetDoubleFieldVal(SQLRECORDSET rs, CString fieldName)
{
_variant_t var_t;
double reti=0;
var_t=rs->GetFields()->GetItem((LPCTSTR)fieldName)->GetValue();
switch(var_t.vt)
{
case VT_R4:{reti=var_t.fltVal;break;}
case VT_R8:{reti=var_t.dblVal;break;}
case VT_DECIMAL:
{
VarR8FromDec(&(var_t.decVal),&reti);
break;
}
}
return reti;
}
DBDATETIME CSMSADO::GetDateTimeFeildVal(SQLRECORDSET prs,CString pFieldName)
{
_variant_t var_t;
DBDATETIME reti;
memset(&reti,0,sizeof(DBDATETIME));
var_t=prs->GetFields()->GetItem((LPCTSTR)pFieldName)->GetValue();
switch(var_t.vt)
{
case VT_DATE:{
VariantTimeToSystemTime(var_t.date,&reti);
break;}
}
return reti;
}
//////////////////////////////////////////////////////////////////////////
//取得日期字段的值并返回文件型
//////////////////////////////////////////////////////////////////////////
CString CSMSADO::GetDateTimeFeildTextValue(SQLRECORDSET prs,CString pFieldName)
{
_variant_t var_t;
DBDATETIME dateTime;
CString result;
memset(&dateTime,0,sizeof(DBDATETIME));
var_t=prs->GetFields()->GetItem((LPCTSTR)pFieldName)->GetValue();
switch(var_t.vt)
{
case VT_DATE:{
VariantTimeToSystemTime(var_t.date,&dateTime);
break;}
}
result.Format("%04d-%02d-%02d %02d:%02d:%02d",
dateTime.wYear, //年
dateTime.wMonth, //月
dateTime.wDay, //日
dateTime.wHour, //时
dateTime.wMinute, //分
dateTime.wSecond //秒
);
return result;
}
CString CSMSADO::GetTextFieldVal(SQLRECORDSET rs,CString fieldName)
{
_variant_t var_t;
CString result="";
FieldPtr fieldPtr=rs->GetFields()->GetItem((LPCTSTR)fieldName);
if(fieldPtr==NULL)
{
TRACE("没取到相关内容");
return result;
}
var_t=fieldPtr->GetValue();
if (var_t.vt==VT_BSTR)
{
result=(char*)var_t.operator _bstr_t().operator char*( ) ;
Trim(result);
}
return result;
}
CString CSMSADO::GetDataTimeText(DBDATETIME t)
{
CString s="";
char buf[50]={'\0'};
sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d",t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute,t.wSecond);
s=buf;
return s;
}
void CSMSADO::CloseConnect()
{
if(m_IsAdoConSuc)
{
m_Connection->Close();
}
}
BOOL CSMSADO::IsConnection()
{
return m_IsAdoConSuc;
}
HRESULT CSMSADO::ConCommitTrans()
{
HRESULT hr=-1;
if (m_IsAdoConSuc)
hr=m_Connection->CommitTrans();
return hr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -