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; 
}