This is a small update I made to the excellent set of ADO classes by Carlos Antollini. Though this might be a little less common than .NET classes, MFC is still very much in use and I hope the changes would be useful to someone.
Dated back to 2005, the original classes did not account for 64 bit data and compilers. I have taken the liberty to add support for 64 bit data such as MS-SQL BIGINT. I also have support for 64 bit binary data to 64 int conversion useful in situations where we must read MS-SQL ROWVERSION and similar type fields.
BIGINT
I have also added a handful of utility functions to make common tasks part of the classes. I did however kept the original code in place for the most part and insured to keep backward compatibility.
Of course, all of this is meant to be compiled as a 32 bit application. I might add more for 64 bit applications later, if necessary.
You might also have to get a new TLB for some operating system. It is included in this article and from Microsoft. (msado60_Backcompat_i386.tlb)
Using the code
In this section, I will not repeat what Carlos described in detail in his original post but concentrate on my changes.
Depending on the bit size of the host operating system, a different version of ADO is used. Make sure to define this value before including the header if needed:
#define _USE_WINX86_FOLDER_ //Use this when compiling on 64 bit PC #include <ado2.h> //ADO wrapper class
First, support 64 bit data:
The GetFieldValue functions returns a value that contains the value of a field.
GetFieldValue
BOOL GetFieldValue(LPCTSTR lpFieldName, INT64& lValue); BOOL GetFieldValue(int nIndex, INT64& lValue); BOOL GetFieldValue(LPCTSTR lpFieldName, UINT64& ulValue); BOOL GetFieldValue(int nIndex, UINT64& ulValue);
The SetFieldValue functions sets the value of a field.
SetFieldValue
BOOL SetFieldValue(int nIndex, INT64 lValue); BOOL SetFieldValue(LPCTSTR lpFieldName, INT64 lValue); BOOL SetFieldValue(int nIndex, UINT64 lValue); BOOL SetFieldValue(LPCTSTR lpFieldName, UINT64 lValue);
Here are my new utility functions that wraps commonly used tasks.
The CADODatabase class has a set of functions that corresponds to the _ConnectionPtr. To this class, I have added these:
CADODatabase
_ConnectionPtr
bool supIsValidDBPtr
(CADODatabase* pDB)
pDB->supIsValidDBPtr()
(pDB = new CADODatabase)
bool supReopenDB
bool supIsDBAccessible
The CADORecordset class has a set of functions that corresponds to the _RecordsetPtr. To this class, I have added these:
CADORecordset
_RecordsetPtr
bool supHasRecord()
bool supOpenHasRecord()
__int64 supDbRowVersionTo64(LPCSTR pszField)
The new CADOTool class has a set of static utility functions that wraps common tasks:
CADOTool
bool supInitDatabase
CADODatabase* pDB = NULL; //Declare a new empty pointer bool bRc = supInitDatabase(&pDB, szConnectString, 10); //Try to init
void supCloseDB
supCloseDB(&pData->m_pAltDB); //Closes the database if opened and the pointer is valid, //set the host's pointer to NULL on exit
bool supIsValidRSPtr
void supCleanCMD
void supCleanRS
void supCleanPrm
bool adoBuildConnection
CString