五、开始编写ADO应用程序.
使用ADO之前,我们另外还需要添加下面的语句,如此把ADO的库引入到工程中
. #import "c:\program files\common files\system\ado\msado15.dll"
no_namespace rename("EOF","adoEOF")
根据机器安装时候的设置不同具体的路径可能不一样。
另外编译的时候会出现如下的警告信息:
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
MSDN建议我们不要理会。如果你实在不想看到的话可以在stdafx.h中加入一行下面的代码:
#pragma warning(disable:4146)
这样这个警告信息就不会再出现了。
ADO使用了COM,所以在使用ADO之前,必须对COM进行了初始化,否则无法使用.你可以使用AfxOleInit()来初始化,但只能初始一次,你不能多次调用此函数,建议你在应用程序的APP类的InitInstance方法中进行初始化.
上面这些一般相关的资料都有详细说明,因此我就不细说了,下面我们来看看如何我封装的两个类。
六、ADO封装类:CAdoConnection 和 CAdoRecordSet
首先当然是要连接到数据源了,连接到数据源的函数是_CAdoConnection的Connect方法,它封装了ADO连接对象的CreateInstance和Open方法:
我们来看看我是如何封装的:
BOOL CAdoConnection::Connect(LPCTSTR strConnect, long lOptions)
{
m_strConnect = strConnect;
try
{
///创建 Connection 对象---------------------------
HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");
if (SUCCEEDED(hr))
{
// 连接数据库---------------------------------------------
if (SUCCEEDED(m_pConnection->Open(strConnect, "", "", lOptions)))
{
return TRUE;
}
}
}
catch (_com_error e)
{
TRACE(_T(":( 连接数据库发生错误: %s\n"), e.ErrorMessage());
return FALSE;
}
catch (...)
{
TRACE(_T(":( 连接数据库时发生未知错误:"));
}
return FALSE;
}
使用之前先定义一个CAdoConnection 类对象如m_adoConnection,例如:
CString strSrcName = "E:\\Access\\datebase.mdb";//假设在e盘有这样一个access的数据库文件
CString strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strSrcName;
m_adoConnection.Connect(LPCSTR(strConnect));
这样就连接到数据源了.
接着就是要打开记录集了,下面我对它的open方法的封装:使用进你可以忽略后面的三个参数,直接把一个SQL语句传给它.
HRESULT CAdoRecordSet::Open(LPCTSTR strSQL,
long lOption,
CursorTypeEnum CursorType,
LockTypeEnum LockType)
{
try
{
if (m_pConnection == NULL)
{
return -1;
}
else if (m_pRecordset == NULL)
{
m_pRecordset.CreateInstance("ADODB.Recordset");
}
m_pRecordset->Open(_bstr_t(strSQL),
_variant_t((IDispatch*)m_pConnection->GetConnection(), true),
CursorType, LockType, lOption);
if (m_pRecordset == NULL)
{
return -1;
}
return (m_pRecordset->adoEOF) ? 0 : 1;
}
catch (_com_error e)
{
TRACE(_T(":( 打开记录集发生错误: %s\n"), e.ErrorMessage());
return -1;
}
}
例如我们可以这样来用:CAdoRecordSet rset;
rset.SetAdoConnection(&(GetDocument()->m_adoConnection));//记得要先指定相应的连接对象,否则会出错.
m_strSQL = "select * from city";//要执行的SQL语句.
rset.Open(m_strSQL);