ADOConn.h 文件:
// ADOConn.h: interface for the ADOConn class.
//
//
#if !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)
#define AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "RxRecordset.h"
class ADOConn
{
public:
ADOConn();
virtual ~ADOConn();
void OnInitADOConn();//初始化连接数据库
//执行查询
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
_ConnectionPtr GetConnection();
//执行SQL语句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
CString AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style);
int GetRecordCount(_RecordsetPtr pRst);
private:
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRs;
};
#endif // !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)
ADOConn.cpp 文件:
// ADOConn.cpp: implementation of the ADOConn class.
//
//
#include "stdafx.h"
#include "ADOConn.h"
#include "MainFrm.h"
#include "AppFullPath.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);
_bstr_t bstrConnect;
CString strConnect;
char m_pzUser[128]; //登录数据库用户
char m_pzPassWord[128]; //登录数据库密码
char m_pzDataBase[128]; //登录数据库名称
char m_pzServer[128]; //服务器名称
CAppFullPath dlgpath;
CFileFind finder;
BOOL finded;
CString databasepath;
databasepath=dlgpath.GetDatabasePath();
finded=finder.FindFile(databasepath);
HRESULT hr;
try
{
m_pCon.CreateInstance(__uuidof(Connection));
m_pCon->CursorLocation =adUseClient;
if(!finded)
{
AfxMessageBox("数据库检查失败!");
return;
}
GetPrivateProfileString("OPTION", "Server", "(local)", m_pzServer, sizeof(m_pzServer), databasepath) ;
GetPrivateProfileString("OPTION", "DataBase", "WebGoServer", m_pzDataBase, sizeof(m_pzDataBase), databasepath) ;
GetPrivateProfileString("OPTION", "UserId", "sa", m_pzUser, sizeof(m_pzUser), databasepath) ;
GetPrivateProfileString("OPTION", "PassWord", "sa", m_pzPassWord, sizeof(m_pzPassWord), databasepath) ;
strConnect.Format("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",
m_pzServer, m_pzUser, m_pzPassWord, m_pzDataBase);
hr = m_pCon.CreateInstance(__uuidof(Connection));//创建Connection对象
if(SUCCEEDED(hr))
{
m_pCon->ConnectionString=(_bstr_t)strConnect;
hr = m_pCon->Open("","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
::MessageBox(NULL, errormessage, "ERROR", MB_OK|MB_ICONERROR);
CMainFrame *p=(CMainFrame *)AfxGetApp()->m_pMainWnd;
p->DestroyWindow();
}
}
_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
//连数据库,如果Connection对象为空,则重新连数据库
if(m_pCon==NULL)
OnInitADOConn();
//创建记录集对象
m_pRs.CreateInstance(__uuidof(Recordset));
m_pRs->Open(bstrSQL,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
//捕捉异常
catch(_com_error *e)
{
AfxMessageBox(e->Description());
}
//返回记录集
return m_pRs;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pCon==NULL)
OnInitADOConn();
m_pCon->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}
_ConnectionPtr ADOConn::GetConnection()
{
return m_pCon;
}
void ADOConn::ExitConnect()
{
if(m_pRs!=NULL)
m_pRs->Close();
m_pCon->Close();
//释放环境
::CoUninitialize();
}
CString ADOConn::AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style)
{
CString sNewNumber;
return sNewNumber;
}
int ADOConn::GetRecordCount(_RecordsetPtr pRst)
{
int count=0;
try
{
pRst->MoveFirst();
}
catch(...)
{
return 0;
}
while(!pRst->adoEOF)
{
pRst->MoveNext();
count=count+1;
}
pRst->MoveFirst();
return count;
}