数据库访问层的实现.doc
文本预览下载声明
系统数据库操作采用ADO技术,在进行代码设计时,把数据库操作的代码单独写在一个自定义的ado.cpp文件里,包括CADODatabase和CADORecordset两个类分别实现对数据库和记录集的操作,并将这些操作封装在两个类中。
(1)引入ado库
#import C:\Program Files\Common Files\System\ADO\msado15.dll no_namespace rename(EOF, adoEOF),rename(BOF,adoBOF)
(2)用_ConnectionPtr对象连接数据库
连接数据库操作中LPCTSTR lpstrConnection作为输入参数,在lpstrConnection参数中设置驱动driver={SQL Server},数据源(本地) Server=,数据库名称DATABASE=QUEStoreDB,数据库用户名UID,数据库用户密码PWD。运用_ConnectionPtr连接数据源。主要代码如下:
BOOL CADODatabase::Open(LPCTSTR lpstrConnection)
{
HRESULT hr = S_OK;
if(IsOpen())
Close();
if(strcmp(lpstrConnection, _T()) != 0)
m_strConnection = lpstrConnection;
ASSERT(!m_strConnection.IsEmpty());
try
{
hr = m_pConnection-Open(_bstr_t(m_strConnection), , , NULL);
return hr == S_OK;
}
catch(_com_error e)
{
dump_com_error(e);
}
return FALSE;
}
(3)用_ConnectionPtr对象执行指令
当对数据库进行插入、删除、更新操作时用此方法。String sql为输入参数,传入SQL(Insert,Delete,Update)语句。主要代码如下:
BOOL CADODatabase::Execute(LPCTSTR lpstrExec)
{
ASSERT(m_pConnection != NULL);
ASSERT(strcmp(lpstrExec, _T()) != 0);
try
{
m_pConnection-Execute(_bstr_t(lpstrExec), NULL, adExecuteNoRecords);
}
catch(_com_error e)
{
dump_com_error(e);
}
return TRUE;
}
(4)使用_RecordsetPtr对象返回记录集
使用数据记录集指针_RecordsetPtr来实现ADO数据操作。lpstrExec为输入参数,传入SQL(Select)语句;通过_RecordsetPtr对象的操作提取记录集。主要代码如下:
BOOL CADORecordset::Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec, int nOption)
{
if (IsOpen()) Close();
if(strcmp(lpstrExec, _T()) != 0)
m_strQuery = lpstrExec;
ASSERT(!m_strQuery.IsEmpty());
m_strQuery.TrimLeft();
BOOL bIsSelect = m_strQuery.Mid(0, strlen(Select )).CompareNoCase(select ) == 0;
try
{
m_pRecordset-CursorLocation = adUseClient;
if(bIsSelect || nOption == openQuery)
m_pRecordset-Open((LPCSTR)m_strQuery, _variant_t((IDispatch*)mpdb, TRUE),
adOpenStatic, adLockOptimistic, adCmdText);
else if(nOption == openTable)
m_pRecordset-Open((LPCSTR)m_strQuery, _variant_t((IDispatch*)mpdb, TRUE),
adOpenDynamic, adLockOptimistic, adCmdTable);
els
显示全部