ADO C++ Extensions
实际上,如果你是用C++进行应用程序开发的话,就应该使用ADO C++ Extensions。我们知道,在VB或者用VBScript来操作ADO的话,是非常方便的,但是如果使用C/C++或者是Java的话,就必须要处理类似VARIANTs这样的数据结构,实现和C++数据结构的转换,而这个无疑是所有C++开发人员都很头疼的事情。但如果你使用C++扩展的话,ADO不需要从数据提供者处得到列信息。ADO在设计时刻使用开发人员提供的列信息。以下是一个简单的示例:
file://创建和具体记录相对应的类
class CAuthor : public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs1)
ADO_VARIABLE_LENGTH_ENTRY4(1, adVarChar, m_szau_id, sizeof(m_szau_id), FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(2,adVarChar,m_szau_fname,sizeof(m_szau_fname), FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(3,adVarChar,m_szau_lname,sizeof(m_szau_lname), FALSE)
END_ADO_BINDING()
protected:
char m_szau_id[12];
char m_szau_fname[21];
char m_szau_lname[41];
}; void FetchAuthorData()
{
CAuthor author;
_RecordsetPtr pRs; file://记录集对象
IADORecordBinding *piAdoRecordBinding;
pRs.CreateInstance(__uuidof(Recordset)); file://获取COM对象接口指针
file://得到需要的记录集
pRs->Open("select au_id, au_fname, au_lname from Employees",
"Provider=SQLOLEDB;Data Source=sureshk1;Database=pubs;
User Id=sa;Password=;",
adOpenForwardOnly, adLockReadOnly, adCmdText);
file://查询接口IADORecordBinding
pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&piAdoRecordBinding);
file://和我们自己定义的对象相绑定
piAdoRecordBinding->BindToRecordset(&author);
while (VARIANT_FALSE == pRs->EOF) file://得到记录中的相关内容
{
printf("%s %s %s", author.m_szau_id, author.m_szau_fname, author.m_szau_lname);
pRs->MoveNext();
}
piAdoRecordBinding->Release(); file://释放对象
}
|