📄 adodb.cpp
字号:
#include "stdafx.h"
#include "ADODB.h"
CAdoDB::CAdoDB()
{
::CoInitialize(NULL); //调用ColInitialize初始化环境
}
CAdoDB::~CAdoDB()
{
::CoUninitialize(); //释放COM对象
}
BOOL CAdoDB::IsOpen()
{
try
{
return (m_pConn!=NULL && (m_pConn->State & adStateOpen));
}
catch(_com_error e) //异常处理
{
AfxMessageBox(e.ErrorMessage());
}
return FALSE;
}
_RecordsetPtr CAdoDB::Execute(LPCTSTR lpszSQL,long lOptions)//adCmdText
{
_variant_t RecordsAffected;
try
{
//执行SQL语句
return m_pConn->Execute(_bstr_t(lpszSQL),&RecordsAffected,adCmdText);
}
catch(_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
return FALSE;
}
_RecordsetPtr CAdoDB::ExecuteQuery(LPCTSTR lpszSQL,long lOptions)//adCmdText
{
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->CursorLocation=adUseClient;
try
{
m_pRecordset->Open(lpszSQL,_variant_t((IDispatch*)m_pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
return m_pRecordset;
}
BOOL CAdoDB::Open(LPCTSTR lpszConnect,long lOptions)
{
m_pConn.CreateInstance("ADODB.Connection");//创建Connection对象
//初始化Recordset指针
m_pRs.CreateInstance(_uuidof(Recordset));
m_strConn=lpszConnect;
if(m_strConn.IsEmpty())
{
return FALSE;
}
if(IsOpen()) Close();
try
{
//连接数据库
return (m_pConn->Open(_bstr_t(m_strConn),"","",lOptions)==S_OK);
}
catch(_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
return FALSE;
}
void CAdoDB::Close()
{
try
{
if(m_pConn!=NULL && IsOpen())
{
m_pConn->Close();//关闭数据的连接
}
}
catch(_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
}
void CAdoDB::ExecuteQueryValue(LPCTSTR lpszSQL,CString& value)
{
try
{
//打开记录集
m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,
adLockOptimistic,adCmdText);
if(!m_pRs->adoEOF)
{
_variant_t thevalue=m_pRs->GetCollect(_variant_t((short)0));//获取字段值
value=vartostr(thevalue);
}
m_pRs->Close();
}
catch(_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
}
void CAdoDB::ExecuteQuery(LPCTSTR lpszSQL,CDStrs& Fields)
{
try
{
//打开记录集
m_pRs->Open(_bstr_t(lpszSQL),(IDispatch*)m_pConn,adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_pRs->adoEOF)
{
CStrs strs;
_variant_t thevalue;
//获取一条记录中的所有字段值保存到字符数组strs中
int size=m_pRs->Fields->Count;
for(long index=0;index<m_pRs->Fields->Count;index++){
thevalue=m_pRs->GetCollect(_variant_t(index));
CString temp=vartostr(thevalue);
strs.push_back(temp);
}
Fields.push_back(strs);//保存一条记录到二维字符串数组
m_pRs->MoveNext();//转到下一条记录
}
m_pRs->Close();
}
catch(_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
}
CString CAdoDB::vartostr(_variant_t &var)
{
CString strValue;
switch(var.vt)
{
//字符串
case VT_BSTR:
case VT_LPSTR:
case VT_LPWSTR:
strValue=(LPCTSTR)(_bstr_t)var;
break;
//BYTE类型
case VT_I1:
case VT_UI1:
strValue.Format("%d",var.bVal);
break;
//短型型
case VT_I2:
strValue.Format("%d",var.iVal);
break;
//无符号短整型
case VT_UI2:
strValue.Format("%d",var.uiVal);
break;
//整型
case VT_INT:
strValue.Format("%d",var.intVal);
break;
//整型
case VT_I4:
strValue.Format("%d",var.lVal);
break;
//长整型
case VT_I8:
strValue.Format("%d",var.lVal);
break;
//无符号整型
case VT_UINT:
strValue.Format("%d",var.uintVal);
break;
//无符号整型
case VT_UI4:
strValue.Format("%d",var.ulVal);
break;
//无符号长整型
case VT_UI8:
strValue.Format("%d",var.ulVal);
break;
case VT_VOID:
strValue.Format("%8x",var.byref);
break;
//浮点型,保持两位小数
case VT_R4:
strValue.Format("%.2f",var.fltVal);
break;
//双精度型,保持两位小数
case VT_R8:
strValue.Format("%.2f",var.dblVal);
break;
//数值型,保持两位小数
case VT_DECIMAL:
strValue.Format("%.2f",(double)var);
break;
//货币型
case VT_CY:
{
COleCurrency cy=var.cyVal;
strValue=cy.Format();
}
break;
//blob型数据
case VT_BLOB:
case VT_BLOB_OBJECT:
case 0x2011:
strValue="[BLOB]";
break;
//布尔型
case VT_BOOL:
strValue=var.boolVal?"TRUE":"FALSE";
break;
//日期型
case VT_DATE:
{
DATE dt=var.date;
COleDateTime oleDt=COleDateTime(dt);
strValue=oleDt.Format("%Y-%m-%d %H:%M:%S");
}
break;
//NULL值
case VT_NULL:
strValue="";
break;
case VT_EMPTY:
strValue="";
break;
case VT_UNKNOWN://未知类型
default:
strValue="UN_KNOW";
break;
}
return strValue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -