www.pudn.com > cygl.rar > ADOConn.cpp
// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CYGLXT.h"
#include "ADOConn.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL);//初始化OLE/COM库环境
try
{
m_pConnection.CreateInstance("ADODB.Connection");//创建connection对象
_bstr_t strConnect="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CYGLXT;Data Source=.";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)//捕捉异常
{
AfxMessageBox(e.Description());//显示错误信息
}
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)//连接数据库,如果connection对象为空,则重新连接数据库
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录对象集
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);//取得表中的记录
}
catch(_com_error e)
{
e.Description();
}
return m_pRecordset;//返回记录集
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
if(m_pConnection==NULL)/*是否连*/
OnInitADOConn(); /*接数据库*/
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
e.Description();
return false;
}
}
void ADOConn::ExitConnect()
{
if(m_pRecordset!=NULL) /*关闭记录*/
m_pRecordset->Close();/*集和连接*/
m_pConnection->Close();
::CoUninitialize();//释放环境
}
int ADOConn::GetRecordCount()
{
int nCount=0;
try{
m_pRecordset->MoveFirst();
}
catch(...)
{
return 0;
}
if(m_pRecordset->adoEOF)
return 0;
while (!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
nCount=nCount+1;
}
m_pRecordset->MoveFirst();
return nCount;
}
CString ADOConn::GetFieldValue(CString Field)
{
_variant_t Thevalue;
CString temp;
Thevalue=m_pRecordset->GetCollect((_bstr_t)Field);
if(Thevalue.vt==VT_EMPTY ||Thevalue.vt==VT_NULL)
temp="";
else
{
temp=(char*)(_bstr_t)Thevalue;
temp.TrimRight();
temp.TrimLeft();
}
return temp;
}
BOOL ADOConn::Move(int nRecordNum)
{
try
{
if(!m_pRecordset->adoEOF)
{
m_pRecordset->MoveFirst();
}
m_pRecordset->Move(nRecordNum);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
return true;
}
void ADOConn::close()
{
m_pRecordset->Close();
m_pConnection->Close();
m_pRecordset=NULL;
m_pConnection=NULL;
::CoUninitialize();
}
BOOL ADOConn::Open(CString srecordset, UINT adCmd)
{
try{
m_pRecordset=m_pConnection->Execute((_bstr_t)srecordset,NULL,adCmd);
}
catch(_com_error&e)
{
AfxMessageBox(e.Description());
return false;
}
return true;
}