一组ADO类 - 版本 2.20






4.93/5 (262投票s)
使用ADO类进行简单的数据库访问。
概述
- CADODatabase 类
- CADORecordset 类 
- CADORecordset
- 打开
- Execute
- GetQuery
- SetQuery
- RecordBinding
- GetRecordCount
- IsOpen
- Close
- GetFieldCount
- GetFieldValue
- IsFieldNull
- IsFieldEmpty
- IsEof
- IsBof
- 移动
- AbsolutePage
- GetPageCount
- PageSize
- AbsolutePosition
- GetFieldInfo
- GetChunk
- AppendChunk
- GetString
- GetLastError
- GetLastErrorString
- AddNew
- 未使用。
- 删除
- 更新
- CancelUpdate
- SetFieldValue
- 查找
- FindFirst
- FindNext
- GetBookmark
- SetBookmark
- SetFilter
- SetSort
- GetRecordset
- GetActiveConnection
- 克隆
- SaveAsXML
- OpenXML
- OpenSchema
- Requery
 
- CADOParameter 类
- CADOCommand 类
- CJetEngine 类
- CADOException 类
- COLEDBDataLink
- COLEDBException
- 常见问题
概述
我创建这些类是为了方便使用ADO。为此,我创建了CADODatabse类和CADORecordset类。
CADODatabase 类
CADODatabase类包含一组与_ConnectionPtr对应的函数。
创建一个CADODatabase对象。
CADODatabase();
Open函数打开到数据库的连接。
BOOL Open(LPCTSTR lpstrConnection = _T("")); throw(CADOException);
参数
LPCTSTR lpstrConnection - 连接字符串。
注意:该类有一个SetConnectionString函数。您可以通过此函数插入连接字符串。在这种情况下,您可以这样做:
//Sample with Connection string for SQL Server CADODatabase* pAdoDb = new CADODatabase(); CString strConnection = _T(""); strConnection = _T("Provider=MSDASQL;PersistSecurityInfo=False;" "Trusted_Connection=Yes;" "Data Source=Access Sql Server;catalog=sampledb"); pAdoDb->SetConnectionString(strConnection); if(pAdoDb->Open()) DoSomething(); . . . //Sample with Connection String for Access database CADODatabase* pAdoDb = new CADODatabase(); CString strConnection = _T(""); strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;" "Data Source=C:\\VCProjects\\ADO\\Test\\dbTest.mdb"); pAdoDb->SetConnectionString(strConnection); if(pAdoDb->Open()) { DoSomething(); . . . pAdoDb->Close(); } delete pAdoDb;
Execute函数在打开的数据库中执行SQL语句。
BOOL Execute(LPCTSTR lpstrExec);
throw(CADOException);
参数
LPCTSTR lpstrExec - 一个指向包含要执行的SQL语句的字符串的指针。
CADODatabase* pAdoDb = new CADODatabase(); CString strConnection = _T(""); strConnection = _T("Provider=MSDASQL;" "PersistSecurityInfo=False;" "Trusted_Connection=Yes" "Data Source=Access Sql Server;catalog=sampledb"); if(pAdoDb->Open(strConnection)) pAdoDb->Execute("Delete From tblClients Where Cheker = 3");
返回值
如果语句执行成功,则函数返回TRUE。
CADODatabase::GetRecordsAffected
GetRecordsAffcted函数返回最后执行的SQL语句影响的记录数。
int GetRecordsAffected();
CADODatabase::GetActiveConnection
GetActiveConnection返回活动的连接。
_ConnectionPtr GetActiveConnection();
GetRecordCount返回查询中受影响的记录数。
DWORD GetRecordCount(_RecordsetPtr m_pRs);
参数
_RecorsetPtr m_Prs - 记录集。
CADODatabase::BeginTransaction
调用此函数开始一个事务。在调用BeginTransaction后,您对数据的更新将在提交事务时生效。
long BeginTransaction();
CADODatabase::CommitTransaction
调用CommitTransaction函数来提交一个事务,例如,将一组编辑和更新保存到一个或多个数据库。
long CommitTransaction();
CADODatabase::RollbackTransaction
调用RollbackTransaction函数来结束当前事务,并将所有数据库恢复到事务开始之前的状态。
long RollbackTransaction();
IsOpen函数返回与数据库的连接状态。
BOOLIsOpen();
返回值
如果与数据库的连接已打开,则函数返回TRUE。
Close函数关闭到数据库的连接。
void Close();
CADODatabase::SetConnectionString
使用SetConnectionString,您可以插入连接字符串。
void SetConnectionString(LPCTSTR lpstrConnection);
参数
LPCTSTR lpstrConnection - 用于打开数据库的连接字符串。
CADODatabase::GetConnectionString
GetConnectionString函数返回用于建立数据库连接的连接字符串。
CString GetConnectionString();
CADODatabase::SetConnectionMode
SetConnectionMode函数设置连接模式。
void SetConnectionMode(cadoConnectModeEnum nMode);
参数
cadoConnectModeEnum nMode - 一个变量,用于定义要使用的连接模式。它可以是以下之一:
- CADODatabase::connectModeUnknown
- CADODatabase::connectModeRead
- CADODatabase::connectModeWrite
- CADODatabase::connectModeReadWrite
- CADODatabase::connectModeShareDenyRead
- CADODatabase::connectModeShareDenyWrite
- CADODatabase::connectModeShareExclusive
- CADODatabase::connectModeShareDenyNone
GetLastError函数返回最后一个错误代码。
DWORD GetLastError();
CADODatabase::GetLastErrorString
GetLastErrorString函数返回最后一个错误字符串。
CString GetLastErrorString();
CADORecordset 类
CADORecordset类包含一组与_RecordsetPtr对应的函数。
创建一个CADORecordset对象。
CADODatabase(); CADORecordset(CADODatabase* pAdoDatabase);
参数
CADODatabase* pAdoDatabase - 一个CADODatabase对象指针。
Open函数打开一个记录集。
BOOL Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown); BOOL Open(LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown);
参数
- _ConnectionPtr mpdb- 连接指针。
- LPCTSTR lpstrExec- 一个指向包含SQL- SELECT语句的字符串的指针。
- int nOption- 一个整数,用于定义访问模式。可能的值如下:- CADORecordset::openUnknown
- CADORecordset::openQuery
- CADORecordset::openTable
- CADORecordset::openStoredProc
 
返回值
如果执行成功,则返回TRUE。
Execute函数打开一个记录集。
BOOL Execute(CADOCommand* pCommand);
throw(CADOException);
参数
CADOCommand* pCommand - 一个CADOCommand指针。
返回值
如果执行成功,则返回TRUE。
GetQuery返回包含SQL SELECT语句的字符串。
CString GetQuery();
void SetQuery(LPCSTR strQuery);
参数
LPCTSTR strQuery - 一个指向包含SQL SELECT语句的字符串的指针。
BOOL RecordBinding(CADORecordBinding pAdoRecordBinding);
参数
CADORecordBinding pAdoRecordBinding
GetRecordCount返回记录集中已访问的记录数。
DWORD GetRecordCount();
IsOpen确定记录集是否已打开。
BOOL IsOpen();
返回值
如果记录集未关闭,则此成员函数返回TRUE。
Close函数关闭记录集。
void Close();
GetFieldCount函数返回记录集中字段的数量。
long GetFieldCount();
GetFieldValue函数返回一个包含字段值的变量。
BOOL GetFieldValue(LPCTSTR lpFieldName, int nValue); BOOL GetFieldValue(int nIndex, int nValue); BOOL GetFieldValue(LPCTSTR lpFieldName, long lValue); BOOL GetFieldValue(int nIndex, long lValue); BOOL GetFieldValue(LPCTSTR lpFieldName, unsigned long ulValue); BOOL GetFieldValue(int nIndex, unsigned long ulValue); BOOL GetFieldValue(LPCTSTR lpFieldName, double dbValue); BOOL GetFieldValue(int nIndex, double dbValue); BOOL GetFieldValue(LPCTSTR lpFieldName, CString strValue, CString strDateFormat = _T("")); BOOL GetFieldValue(int nIndex, CString strValue, CString strDateFormat = _T("")); BOOL GetFieldValue(LPCTSTR lpFieldName, COleDateTime time); BOOL GetFieldValue(int nIndex, COleDateTime time); BOOL GetFieldValue(LPCTSTR lpFieldName, bool bValue); BOOL GetFieldValue(int nIndex, bool bValue); BOOL GetFieldValue(LPCTSTR lpFieldName, COleCurrency cyValue); BOOL GetFieldValue(int nIndex, COleCurrency cyValue); throw(CADOException);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
- double dbValue- 将存储字段值的对象的引用。
- long lValue- 将存储字段值的对象的引用。
- unsigned long ulValue- 将存储字段值的对象的引用。
- int nValue- 将存储字段值的对象的引用。
- CString strValue- 将存储字段值的对象的引用。
- CString strDateFormat- 一个类似于- strftime格式化字符串的格式化时间字符串。更常见的有:- %a - 缩写的星期名称
- %A - 完整的星期名称
- %b - 缩写的月份名称
- %B - 完整的月份名称
- %c - 本地化的日期和时间表示
- %d - 月份的十进制数字 (01 - 31)
- %H - 24小时制的小时 (00 - 23)
- %I - 12小时制的小时 (01 - 12)
- %j - 一年的第几天,十进制数字 (001 - 366)
- %m - 月份的十进制数字 (01 - 12)
- %M - 分钟的十进制数字 (00 - 59)
- %p - 当前语言环境的上午/下午指示器(用于12小时制)
- %S - 秒的十进制数字 (00 - 59)
- %U - 一年的周数,十进制数字,星期日为一周的第一天(00 - 53)
- %w - 星期几,十进制数字(0 - 6;星期日为0)
- %W - 一年的周数,十进制数字,星期一为一周的第一天(00 - 53)
- %x - 本地化的日期表示
- %X - 本地化的时间表示
- %y - 不带世纪的年份,十进制数字 (00 - 99)
- %Y - 带世纪的年份,十进制数字
 
- COleDateTime time- 将存储字段值的对象的引用。
- bool bValue- 将存储字段值的对象的引用。
- COleCurrency cyValue- 将存储字段值的对象的引用。
IsFieldNull函数确定字段数据是否为null。
BOOL IsFieldNull(LPCTSTR lpFieldName); BOOL IsFieldNull(int nIndex); throw(CADOException);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
返回值
如果字段数据为null,则此函数返回TRUE。
IsFieldEmpty函数确定字段数据是否为空。
BOOL IsFieldEmpty(LPCTSTR lpFieldName); BOOL IsFieldEmpty(int nIndex); throw(CADOException);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
返回值
如果字段数据为空,则此函数返回TRUE。
BOOL IsEof();
返回值
如果当前位置没有记录,则此函数返回TRUE。
BOOL IsBof();
返回值
如果当前位置是记录集的底部,则此函数返回TRUE。
CADORecordset::MoveFirst
CADORecordset::MoveNext
CADORecordset::MovePrevious
CADORecordset::MoveLast
这些函数将记录集的第一条/下一条/上一条/最后一条记录设置为当前记录。
void MoveFirst(); void MoveNext(); void MovePrevious(); void MoveLast();
CADORecordset::GetAbsolutePage
CADORecordset::SetAbsolutePage
指示当前记录所在的页码。
long GetAbsolutePage(); void SetAbsolutePage(int nPage);
参数
int nPage - 页码,从1开始。
GetPageCount返回记录集中的页数。
long GetPageCount();
CADORecordset::GetPageSize
CADORecordset::SetPageSize
指示每页的记录数。
long GetPageSize(); void SetPageSize(int nSize);
参数
int nSize - 设置每页的记录数。
例如
CADORecordset* pRs = new CADORecordset(pDb); if(pRs->Open("MyBigTable", CADORecordset::openTable)) { pRs->SetPageSize(5); for(register int nPageIndex = 1; nPageIndex <= pRs->GetPageCount(); nPageIndex++) { pRs->SetAbsolutePage(nPageIndex); for(register int nRecNumber = 0; nRecNumber < pRs->GetPageSize(); nRecNumber++) { long lVal; pRs->GetFieldValue("ID", lVal); pRs->MoveNext(); if(pRs->IsEof()) break; } } pRs->Close(); } delete pRs;
CADORecordset::GetAbsolutePosition
CADORecordset::SetAbsolutePosition
指示记录在记录集中的位置。
long GetAbsolutePosition(); void SetAbsolutePosition(int nPosition);
参数
int nPosition - 移动到记录集中的位置。
GetAbsolutePosition()可以返回记录的位置或以下值之一:
- CADORecordset::positionUnknown
- CADORecordset::positionBOF
- CADORecordset::positionEOF
GetFieldInfo返回字段的属性。
BOOL GetFieldInfo(LPCTSTR lpFieldName, CAdoFieldInfo* fldInfo);
BOOL GetFieldInfo(int nIndex, CAdoFieldInfo* fldInfo);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
- CAdoFieldInfo* fldInfo- 返回字段属性的结构。
struct CADOFieldInfo { char m_strName[30]; short m_nType; long m_lSize; long m_lDefinedSize; long m_lAttributes; short m_nOrdinalPosition; BOOL m_bRequired; BOOL m_bAllowZeroLength; long m_lCollatingOrder; };
CADOFieldInfo类中的元素m_nType可以是以下值之一:
- CADORecordset::typeEmpty
- CADORecordset::typeTinyInt
- CADORecordset::typeSmallInt
- CADORecordset::typeInteger
- CADORecordset::typeBigInt
- CADORecordset::typeUnsignedTinyInt
- CADORecordset::typeUnsignedSmallInt
- CADORecordset::typeUnsignedInt
- CADORecordset::typeUnsignedBigInt
- CADORecordset::typeSingle
- CADORecordset::typeDouble
- CADORecordset::typeCurrency
- CADORecordset::typeDecimal
- CADORecordset::typeNumeric
- CADORecordset::typeBoolean
- CADORecordset::typeError
- CADORecordset::typeUserDefined
- CADORecordset::typeVariant
- CADORecordset::typeIDispatch
- CADORecordset::typeIUnknown
- CADORecordset::typeGUID
- CADORecordset::typeDate
- CADORecordset::typeDBDate
- CADORecordset::typeDBTime
- CADORecordset::typeDBTimeStamp
- CADORecordset::typeBSTR
- CADORecordset::typeChar
- CADORecordset::typeVarChar
- CADORecordset::typeLongVarChar
- CADORecordset::typeWChar
- CADORecordset::typeVarWChar
- CADORecordset::typeLongVarWChar
- CADORecordset::typeBinary
- CADORecordset::typeVarBinary
- CADORecordset::typeLongVarBinary
- CADORecordset::typeChapter
- CADORecordset::typeFileTime
- CADORecordset::typePropVariant
- CADORecordset::typeVarNumeric
- CADORecordset::typeArray
例如
if(prs->Open("Clients", CADORecordset::openTable)) { CADOFieldInfo pInfo; prs->GetFieldInfo("Description", &pInfo); if(pInfo.m_nType == CADORecordset::typeVarChar) AfxMessageBox("The type Description Field Is VarChar"); } if(prs->Open("TestTable", CADORecordset::openTable)) { CADOFieldInfo* fInfo = new CADOFieldInfo; prs.GetFieldInfo(0, fInfo); CString strFieldName = fInfo->m_strName; prs->Close(); }
返回值
如果执行成功,则返回TRUE。
此函数返回大型文本或二进制数据Field对象的所有内容或部分内容。
BOOL GetChunk(LPCTSTR lpFieldName, CString& strValue); BOOL GetChunk(int nIndex, CString& strValue); BOOL GetChunk(LPCTSTR lpFieldName, LPVOID pData); BOOL GetChunk(int nIndex, LPVOID pData);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
- CString& strValue- 一个包含从对象返回的数据的字符串指针。
- LPVOID pData- 一个包含从对象返回的数据的指针。
返回值
如果成功执行,则返回TRUE。
此函数将数据追加到大型文本或二进制数据字段。
BOOL AppendChunk(LPCTSTR lpFieldName, LPVOID lpData, UINT nBytes); BOOL AppendChunk(int nIndex, LPVOID lpData, UINT nBytes); throw(CADOException);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
- LPVOID lpData- 一个包含要追加到对象的数据的指针。
- UINT nBytes- 一个- UINT,指示要插入的数据的大小。
返回值
如果执行成功,则返回TRUE。
例如
//Sample of AppendChunck prs.AddNew(); prs.SetFieldValue("ID", 5); prs.SetFieldValue("Description", "Client 05"); prs.SetFieldValue("Checker", 1); prs.AppendChunk("Document", "This Document is the story of Bob and his Friends...", 37); prs.Update(); //Sample of GetChunck char data[1024]; prs.GetChunk("Document", (LPVOID)&data);
此函数将记录集作为字符串返回。
CString GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, 
                  long numRows = 0);
参数
- LPCTSTR lpCols- 列分隔符。
- LPCTSTR lpRows- 行分隔符。
- LPCTSTR lpNull- 表示null值的表达式。
- long numRows- 受影响的行数。
GetLastError函数返回最后一个错误代码。
DWORD GetLastError();
CADORecordset::GetLastErrorString
GetLastErrorString函数返回最后一个错误字符串。
CString GetLastErrorString();
AddNew函数在打开的记录集中添加一条记录。
BOOL AddNew();
throw(CADOException);
返回值
如果执行成功,则返回TRUE。
Edit函数允许在打开的记录集中修改当前记录。
void Edit();
Delete函数删除打开的记录集中的当前记录。
BOOL Delete();
返回值
如果执行成功,则返回TRUE。
Update函数更新当前记录中待处理的更新。
BOOL Update();
throw(CADOException);
返回值
如果执行成功,则返回TRUE。
CancelUpdate函数取消打开的记录集中任何待处理的更新。
void CancelUpdate();
SetFieldValue函数设置字段的值。
BOOL SetFieldValue(int nIndex, int nValue); BOOL SetFieldValue(LPCTSTR lpFieldName, int nValue); BOOL SetFieldValue(int nIndex, long lValue); BOOL SetFieldValue(LPCTSTR lpFieldName, long lValue); BOOL SetFieldValue(int nIndex, unsigned long ulValue); BOOL SetFieldValue(LPCTSTR lpFieldName, unsigned long ulValue); BOOL SetFieldValue(int nIndex, double dblValue); BOOL SetFieldValue(LPCTSTR lpFieldName, double dblValue); BOOL SetFieldValue(int nIndex, CString strValue); BOOL SetFieldValue(LPCTSTR lpFieldName, CString strValue); BOOL SetFieldValue(int nIndex, COleDateTime time); BOOL SetFieldValue(LPCTSTR lpFieldName, COleDateTime time); BOOL SetFieldValue(int nIndex, bool bValue); BOOL SetFieldValue(LPCTSTR lpFieldName, bool bValue); BOOL SetFieldValue(int nIndex, COleCurrency cyValue); BOOL SetFieldValue(LPCTSTR lpFieldName, COleCurrency cyValue);
参数
- LPCTSTR lpFieldName- 指向包含字段名称的字符串的指针。
- int nIndex- 记录集- Fields集合中字段的零基索引,用于按索引查找。
- int nValue- 一个包含字段值的对象的指针。
- long lValue- 一个包含字段值的对象的指针。
- unsigned long lValue- 一个包含字段值的对象的指针。
- double dbValue- 一个包含字段值的对象的指针。
- CString strValue- 一个包含字段值的对象的指针。
- COleDateTime time- 一个包含字段值的对象的指针。
- bool bValue- 一个包含字段值的对象的指针。
- COleCurrency cyValue- 一个包含字段值的对象的指针。
返回值
如果执行成功,则返回TRUE。
例如
CADORecordset* prs = new CADORecordset(m_pAdoDb); prs->Open("Test", openTable); prs->AddNew(); prs->SetFieldValue(0, "dataU"); prs->SetFieldValue(1, "data01"); prs->SetFieldValue(2, (long)51000); COleDateTime time = COleDateTime(2001,6,15, 10, 8, 30); prs->SetFieldValue(3, time); prs->Update(); prs->Close(); delete prs;
Find函数使用比较运算符从打开的记录集中的当前位置查找字符串。
BOOL Find(LPCTSTR lpFind, 
          int nSearchDirection = CADORecordset::searchForward);
参数
- LPCTSTR lpFind- 用于查找记录的字符串表达式。
- int nSearchDirection- 指示操作类型的数值。可能的值是:- CADORecordset::searchForward- 查找下一个位置。
- CADORecordset::searchBackward- 查找上一个位置。
 
返回值
如果执行成功,则返回TRUE。
例如
if(prs.Find("Field0 LIKE 'dataU%'")) { prs.Delete(); while(prs.FindNext()) prs.Delete(); }
FindFirst函数使用比较运算符从打开的记录集中的开头查找字符串。
BOOL FindFirst(LPCTSTR lpFind);
参数
LPCTSTR lpFind - 用于查找记录的字符串表达式。
返回值
如果执行成功,则返回TRUE。
FindNext函数使用FindFirst或Find函数中使用的比较运算符,从最后一个位置在打开的记录集中查找字符串。
BOOL FindNext();
返回值
如果执行成功,则返回TRUE。
GetBookmark函数保存当前记录的位置。
BOOL GetBookmark();
返回值
如果执行成功,则返回TRUE。
SetBookmark函数随时返回到已保存的位置。
void SetBookmark();
返回值
如果执行成功,则返回TRUE。
SetFilter指示对打开的Recordset中的数据进行筛选。
BOOL SetFilter(LPCTSTR strFilter);
throw(CADOException);
参数
LPCTSTR strFilter - 由一个或多个由AND或OR运算符连接的单个子句组成的字符串。
返回值
如果执行成功,则返回TRUE。
例如
CADORecordset* pRs = new CADORecordset(pDb); if(pRs->Open("tblTest", CADORecordset::openTable)) { CString strFilter = _T("LastName = 'Smith' And Age > 30"); pRs->SetFilter(strFilter); . . pRs->Close(); } delete pRs
SetSort函数为CADORecordset对象中的记录设置排序顺序。
BOOL SetSort(LPCTSTR lpstrCriteria);
throw(CADOException);
参数
LPCTSTR lpstrCriteria - 包含SQL语句的ORDER BY子句的字符串。
返回值
如果执行成功,则返回TRUE。
GetRecordset函数返回指向打开的记录集的指针。
_RecordsetPtr GetRecordset();
CADORecordset::GetActiveConnection
GetActiveConnection返回活动的连接。
_ConnectionPtr GetActiveConnection();
Clone函数从现有的CADORecordset对象创建一个副本CADORecordset对象。
BOOL Clone(CADORecordset pAdoRecordset);
throw(CADOException);
参数
CADORecordset pAdoRecordset是一个现有的CADORecordset对象。
返回值
如果执行成功,则返回TRUE。
例如
CADORecordset m_pRs; //Original Recordset CADORecordset RS; //Duplicate Recordset CADORecordset* pRs = CADORecordset(m_pDb); if(pRs->Open("tblTest", CADORecordset::openTable)) //Open the Original Recordset { pRs->Clone(RS); //Create the clone of the original Recordset long lClonRecs = RS.GetRecordCount(); long lOrigRecs = m_pRs->GetRecordCount(); . . RS.Close(); pRs->Close(); } delete pRs;
SaveAsXML函数将打开的记录集以XML格式保存在文件中。
BOOL SaveAsXML(LPCTSTR lpstrXMLFile);
参数
LPCTSTR strXMLFile - 一个字符串,指示将保存记录集的文件的完整路径名。
返回值
如果执行成功,则返回TRUE。
OpenXML函数以记录集格式打开XML文件。
BOOL OpenXML(LPCTSTR lpstrXMLFile);
参数
LPCTSTR strXMLFile - 一个字符串,指示要打开的XML文件的完整路径名。
返回值
如果执行成功,则返回TRUE。
例如
CADORecordset* pRs = CADORecordset(pDB); if(prs->OpenXML("C:\\My.XML")) { CString strClient = _T(""); double dblVal = 0; long lrecs = prs->GetRecordCount(); if(!prs->IsEof()) prs->MoveFirst(); prs->GetFieldValue("Budget", dblVal); prs->GetFieldValue("ClientName", strClient); prs->Close(); }
OpenSchema函数从提供程序获取数据库架构信息。
BOOL OpenSchema(int nSchema, LPCTSTR SchemaID = _T("")); throw(CADOException);
参数
- int nSchema- 表示架构查询类型的数值。
- LPCTSTR SchemaID = _T("")- 并非由OLE DB规范定义的提供程序架构查询的GUID。
| 恒定 | 值 | 描述 | 约束列 | 
|---|---|---|---|
| schemaAsserts | 0 | 返回目录中由给定用户拥有的断言。 | CONSTRAINT_CATALOG*CONSTRAINT_SCHEMA*CONSTRAINT_NAME | 
| schemaCatalogs | 1 | 返回与DBMS可访问的目录相关的物理属性。 | CATALOG_NAME | 
| schemaCharacterSets | 2 | 返回目录中由给定用户访问的字符集。 | CHARACTER_SET_CATALOG*CHARACTER_SET_SCHEMA*CHARACTER_SET_NAME* | 
| schemaCheckConstraints | 5 | 返回目录中由给定用户拥有的检查约束。 | CONSTRAINT_CATALOG*CONSTRAINT_SCHEMA*CONSTRAINT_NAME | 
| schemaCollations | 3 | 返回目录中由给定用户访问的字符排序规则。 | COLLATION_CATALOG*COLLATION_SCHEMACOLLATION_NAME | 
| schemaColumnPrivileges | 13 | 返回目录中由给定用户可用或授予的表列的权限。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAMEGRANTORGRANTEE | 
| schemaColumns | 4 | 返回目录中由给定用户访问的表(包括视图)的列。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME | 
| schemaColumnsDomainUsage | 11 | 返回目录中依赖于由给定用户拥有的目录中定义的域的列。 | DOMAIN_CATALOGDOMAIN_SCHEMADOMAIN_NAMECOLUMN_NAME | 
| schemaConstraintColumnUsage | 6 | 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的列。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME | 
| schemaConstraintTableUsage | 7 | 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的表。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAME | 
| schemaCubes | 32 | 返回架构(或目录,如果提供程序不支持架构)中可用多维数据集的信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAME | 
| schemaDBInfoKeywords | 30 | 返回提供程序特定的关键字列表。 | <无> | 
| schemaDBInfoLiterals | 31 | 返回文本命令中使用的提供程序特定字面量的列表。 | <无> | 
| schemaDimensions | 33 | 返回给定多维数据集的维度信息。它为每个维度有一行。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEDIMENSION_NAMEDIMENSION_UNIQUE_NAME* | 
| schemaForeignKeys | 27 | 返回由给定用户在目录中定义的外部键列。 | PK_TABLE_CATALOGPK_TABLE_SCHEMAPK_TABLE_NAMEFK_TABLE_CATALOGFK_TABLE_SCHEMAFK_TABLE_NAME | 
| schemaHierarchies | 34 | 返回维度中可用的层次结构信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEDIMENSION_UNIQUE_NAME*HIERARCHY_NAMEHIERARCHY_UNIQUE_NAME* | 
| schemaIndexes | 12 | 返回目录中由给定用户拥有的索引。 | TABLE_CATALOGTABLE_SCHEMAINDEX_NAMETYPETABLE_NAME | 
| schemaKeyColumnUsage | 8 | 返回目录中由给定用户约束为主键的列。 | CONSTRAINT_CATALOG*CONSTRAINT_SCHEMA*CONSTRAINT_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME | 
| schemaLevels | 35 | 返回维度中可用的级别信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEDIMENSION_UNIQUE_NAME*HIERARCHY_UNIQUE_NAME*LEVEL_NAMELEVEL_UNIQUE_NAME* | 
| schemaMeasures | 36 | 返回可用度量的信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEMEASURE_NAMEMEASURE_UNIQUE_NAME* | 
| schemaMembers | 38 | 返回可用成员的信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEDIMENSION_UNIQUE_NAME*HIERARCHY_UNIQUE_NAME*LEVEL_UNIQUE_NAME*LEVEL_NUMBERMEMBER_NAMEMEMBER_UNIQUE_NAME*MEMBER_CAPTIONMEMBER_TYPE树运算符(有关更多信息,请参阅OLE DB for OLAP文档。) | 
| schemaPrimaryKeys | 28 | 返回由给定用户在目录中定义的主键列。 | PK_TABLE_CATALOGPK_TABLE_SCHEMAPK_TABLE_NAME | 
| schemaProcedureColumns | 29 | 返回由过程返回的行集的信息。 | PROCEDURE_CATALOG*PROCEDURE_SCHEMAPROCEDURE_NAMECOLUMN_NAME | 
| schemaProcedureParameters | 26 | 返回过程的参数和返回码的信息。 | PROCEDURE_CATALOG*PROCEDURE_SCHEMAPROCEDURE_NAMEPARAMETER_NAME | 
| schemaProcedures | 16 | 返回目录中由给定用户拥有的过程。 | PROCEDURE_CATALOG*PROCEDURE_SCHEMAPROCEDURE_NAMEPROCEDURE_TYPE | 
| schemaProperties | 37 | 返回维度中每个级别的可用属性信息。 | CATALOG_NAMESCHEMA_NAMECUBE_NAMEDIMENSION_UNIQUE_NAME*HIERARCHY_UNIQUE_NAME*LEVEL_UNIQUE_NAME*MEMBER_UNIQUE_NAME*PROPERTY_TYPEPROPERTY_NAME | 
| schemaProviderSpecific | -1 | 如果提供程序定义了自己的非标准架构查询,则使用。 | <提供程序特定> | 
| schemaProviderTypes | 22 | 返回数据提供程序支持的数据类型(基类型)。 | DATA_TYPEBEST_MATCH | 
| schemaReferentialConstraints | 9 | 返回目录中由给定用户拥有的参照约束。 | CONSTRAINT_CATALOG*CONSTRAINT_SCHEMA*CONSTRAINT_NAME | 
| schemaSchemata | 17 | 返回由给定用户拥有的架构(数据库对象)。 | CATALOG_NAMESCHEMA_NAMESCHEMA_OWNER | 
| schemaSQLLanguages | 18 | 返回SQL实现处理目录中定义的数据所支持的符合性级别、选项和方言。 | <无> | 
| schemaStatistics | 19 | 返回目录中由给定用户拥有的统计信息。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAME | 
| schemaTableConstraints | 10 | 返回目录中由给定用户拥有的表约束。 | CONSTRAINT_CATALOG*CONSTRAINT_SCHEMA*CONSTRAINT_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMECONSTRAINT_TYPE | 
| schemaTablePrivileges | 14 | 返回目录中由给定用户可用或授予的表权限。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAMEGRANTORGRANTEE | 
| schemaTables | 20 | 返回目录中由给定用户访问的表(包括视图)。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAMETABLE_TYPE | 
| schemaTranslations | 21 | 返回目录中由给定用户访问的字符转换。 | TRANSLATION_CATALOG*TRANSLATION_SCHEMA*TRANSLATION_NAME* | 
| schemaTrustees | 39 | 预留。 | |
| schemaUsagePrivileges | 15 | 返回目录中由给定用户可用或授予的对象的 USAGE 权限。 | OBJECT_CATALOGOBJECT_SCHEMAOBJECT_NAMEOBJECT_TYPEGRANTORGRANTEE | 
| schemaViewColumnUsage | 24 | 返回由给定用户拥有的、在目录中定义的视图所依赖的列。 | VIEW_CATALOGVIEW_SCHEMAVIEW_NAME | 
| schemaViews | 23 | 返回目录中由给定用户访问的视图。 | TABLE_CATALOGTABLE_SCHEMATABLE_NAME | 
| schemaViewTableUsage | 25 | 返回由给定用户拥有的、在目录中定义的视图所依赖的表。 | VIEW_CATALOGVIEW_SCHEMAVIEW_NAME | 
* 忽略这些值中的空格,因为它们是为了避免页面滚动而添加的。
返回值
如果执行成功,则返回TRUE。
例如
try { CAD if(pdb.Open("Data Source=sysdevpdc;Provider=" "MSOLAP;Initial Catalog=Foodmart 2000")) { CADORecordset prs(&pdb); if(prs.OpenSchema(CADORecordset::schemaMeasures)) { while(!prs.IsEof()) {dset::schemaMeasures)) { while(!prs.IsEof()) { CString strValue; CString strUniqueName; CString strSqlColumnName; int nDataType = 0; int nValue = 0; prs.GetFieldValue("CUBE_NAME", strValue); prs.GetFieldValue("MEASURE_NAME", strValue); prs.GetFieldValue("MEASURE_AGGREGATOR", nValue); prs.GetFieldValue("MEASURE_UNIQUE_NAME", strUniqueName); prs.GetFieldValue("MEASURE_NAME_SQL_COLUMN_NAME", strSqlColumnName); prs.GetFieldValue("DATA_TYPE", nDataType); prs.MoveNext(); } } prs.Close(); } } catch(CADOException &e) { ... }
Requery函数刷新打开的记录集。
BOOL Requery();
throw(CADOException);
返回值
如果执行成功,则返回TRUE。
示例 01
CADODatabase* pAdoDb = new CADODatabase(); CString strConnection = ""; strConnection = _T("Provider=MSDASQL;" "PersistSecurityInfo=False;Trusted_Connection=Yes Data Source=Access Sql Server;catalog=sampledb"); if(pAdoDb->Open((LPCTSTR)strConnection)) { CString strQry = _T(""); int numRecords; strQry.Format(_T("sp_StoreClientFields_ps '%s', %d"), (LPCTSTR)strParam1, nParam2); CADORecordset* pRs = new CADORecordset(pAdoDb); if(!pRs->Open((LPCTSTR)strQry)) { delete pRs; delete pAdoDb; return FALSE } numRecords = pRs->GetRecordCount(); while(!pRs->IsEof()) { CString strVal = _T(""); int nVal = 0; //Get Numeric Field Value pRs->GetFieldValue("NumField1", nVal) //Get String Field Data pRs->GetFieldValue("StrField..", strVal) DoSomething(nVal, strVal); pRs->MoveNext(); } pRs->Close(); } else return FALSE;
CADOParameter 类
CADOParameter类包含一组与_ParameterPtr对应的函数。
创建一个CADOParameter对象。
CADOParameter(int nType, long lSize = 0, int nDirection = paramInput, CString strName = _T(""));
参数
- int nType- 一个- int值,指定- CADOParameter对象的数据类型。可以是CADORecordset::GetFieldInfo中指定的任何值。如果您使用- CADORecordset::typeNumeric或- CADORecordset::typeDecimal,则必须定义精度和标度值。
- long lSize = 0- 一个可选的- long值,指定参数值(以字节或字符为单位)的最大长度。
- int nDirection = paramInput- 一个可选的- int值,指定- CADOParameter对象的方向。可以是以下值之一:- CADOParameter::paramUnknown- 表示参数方向未知。
- CADOParameter::paramInput- 默认值。表示参数是输入参数。
- CADOParameter::paramOutput- 表示参数是输出参数。
- CADOParameter::paramInputOutput- 表示参数既是输入参数也是输出参数。
- CADOParameter::paramReturnValue- 表示参数是返回值。
- CString strName = _T("")- 一个可选字符串,指定- CADOParameter对象的名称。
 
SetValue函数设置CADOParameter对象的值。
BOOL SetValue(int nValue); BOOL SetValue(long lValue); BOOL SetValue(double dbValue); BOOL SetValue(CString strValue); BOOL SetValue(COleDateTime time); BOOL SetValue(_variant_t vtValue);
参数
- int nValue- 一个包含参数值的- int值。
- long lValue- 一个包含参数值的- long值。
- double dbValue- 一个包含参数值的- double值。
- CString strValue- 一个包含参数值的字符串值。
- COleDateTime time- 一个包含参数值的时间值。
- _variant_t vtValue- 一个包含参数值的variant值。
返回值
如果执行成功,则返回TRUE。
SetPrecison函数设置CADOParameter对象的精度。
void SetPrecision(int nPrecision);
SetScale函数设置CADOParameter对象的标度。
void SetScale(int nScale);
GetValue函数返回CADOParameter对象的值。
BOOL GetValue(int& nValue); BOOL GetValue(long& lValue); BOOL GetValue(double& dbValue); BOOL GetValue(CString& strValue, CString strDateFormat = _T("")); BOOL GetValue(COleDateTime& time); BOOL GetValue(_variant_t& vtValue);
参数
- int& nValue- 一个将存储参数值的- int的引用。
- long& lValue- 一个将存储参数值的- long的引用。
- double& dbValue- 一个将存储参数值的- double的引用。
- CString& strValue- 一个将存储参数值的字符串的引用。
- CString strDateFormat = _T("")- 一个类似于- strftime格式化字符串的格式化时间字符串。
- COleDateTime& time- 一个将存储参数值的时间对象的引用。
- _variant_t& vtValue- 一个将存储参数值的variant对象的引用。
返回值
如果执行成功,则返回TRUE。
SetName函数设置CADOParameter对象的名称。
CString SetName(CString strName);
参数
CString strName - 指定参数名称的字符串。
GetName函数返回CADOParameter对象。
CString GetName();
GetType函数返回CADOParameter对象的类型。
int GetType();
GetParameter函数返回指向_Parameter对象的指针。
_ParameterPtr GetParameter();
CADOCommand 类
CADOCommand类包含一组与_CommandPtr对应的函数。
创建一个CADOCommand对象。
CADOCommand(CADODatabase* pAdoDatabase, CString strCommandText = _T(""), int nCommandType = typeCmdStoredProc);
参数
- CADODatabase* pAdoDatabase- 一个- CADODatabase对象指针。
- CString strCommandText = _T("")- 一个可选字符串,指定- CADOCcommand对象的文本。
- int nCommandType = typeCmdStoredProc- 一个可选的- int值,指定- CADOCommand对象的类型。可以是以下值之一:- CADOCommand::typeCmdText- 将- CommandText视为命令或存储过程调用的文本定义。
- CADOCommand::typeCmdTable- 将- CommandText视为表名,其所有列都通过内部生成的SQL查询返回。
- CADOCommand::typeCmdTableDirect- 将- CommandText视为表名,其所有列都已返回。
- CADOCommand::typeCmdStoredProc- 默认值。将- CommandText视为存储过程名称。
- CADOCommand::typeCmdUnknown- 表示- CommandText属性中命令的类型未知。
- CADOCommand::typeCmdFile- 将- CommandText视为持久化记录集的名称。仅与- Recordset.Open或- Requery一起使用。
 
AddParameter函数。
BOOL AddParameter(CADOParameter* pAdoParameter); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, int nValue); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, long lValue); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, double dblValue, int nPrecision = 0, int nScale = 0); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, CString strValue); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, COleDateTime time); BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, _variant_t vtValue, int nPrecision = 0, int nScale = 0);
参数
- CADOParameter* pAdoParameter- 指向- CADOParameter对象的指针。
- CString strName- 指定参数名称的字符串。
- int nType- 一个- int值,指定- CADOParameter对象的数据类型。可以是- CADORecordset::GetFieldInfo中指定的任何值。如果您使用- CADORecordset::typeNumeric或- CADORecordset::typeDecimal,则必须定义精度和标度值。
- int nDirection- 一个- int值,指定- CADOParameter对象的方向。可以是- CADOParameter::CADOParameter中指定的任何值。
- long lSize- 一个- long值,指定参数值(以字节或字符为单位)的最大长度。
- int nValue- 一个包含参数值的- int值。
- long lValue- 一个包含参数值的- long值。
- double dblValue- 一个包含参数值的- double值。
- int nPrecision- 一个包含参数值精度的- int值。
- int nScale- 一个包含参数值标度的- int值。
- CString strValue- 一个包含参数值的字符串值。
- COleDateTime time- 一个包含参数值的时间值。
- _variant_t vtValue- 一个包含参数值的variant值。
返回值
如果执行成功,则返回TRUE。
SetText函数设置CADOCommand对象的命令文本。
void SetText(CString strCommandText);
参数
CString strCommandText - 指定命令文本的字符串。
GetText函数返回CADOCommand对象的命令文本。
CString GetText();
SetType函数设置CADOCommand对象的类型。
void SetType(int nCommandType);
参数
int nCommandType - 一个int值,指示命令的类型。
GetType函数返回CADOCommand对象的类型。
int GetType();
GetCommand函数返回一个Command指针。
_CommandPtr GetCommand();
Execute函数执行命令文本。
BOOLExecute();
返回值
如果执行成功,则返回TRUE。
CADOCommand::GetRecordsAffected
GetRecordsAffected函数返回最后执行的命令影响的记录数。
int GetRecordsAffected();
示例 02
//SQL SCRIPT...
Create Procedure sp_OutputTest
@IN1 int,
@OutInt int Output,
@OutChar varchar(20) Output
As   
    SELECT    
        @OutChar = 'Hello World'
    SELECT    
        @OutInt = 10 * @IN1
    return (90)
GO
//Visual C++ Code...
CADOParameter pParamRetVal(CADORecordset::typeInteger, sizeof(int),
                           CADOParameter::paramReturnValue);
CADOParameter pParamIn(CADORecordset::typeInteger, sizeof(int));
CADOParameter pParamOutInt(CADORecordset::typeInteger, sizeof(int),
                           CADOParameter::paramOutput);
CADOParameter pParamOutChar(CADORecordset::typeChar, sizeof(char) * 20,
                            CADOParameter::paramOutput);
pParamIn.SetValue(2);
CADOCommand pCmd(&pDb, "sp_OutputTest");
pCmd.AddParameter(&pParamRetVal);
pCmd.AddParameter(&pParamIn);
pCmd.AddParameter(&pParamOutInt);
pCmd.AddParameter(&pParamOutChar);
CADORecordset* prs = new CADORecordset(pDb);
if(pRs->Execute(&pCmd))
{
    int nVal = 0;
    int nRetVal = 0;
    CString str = _T("");
    pParamRetVal.GetValue(nRetVal);
    pParamOutInt.GetValue(nVal);
    pParamOutChar.GetValue(str);
}
delete pRS;
CJetEngine 类
CJetEngine类包含一组与_RecordsetPtr对应的函数。
压缩Access数据库。
BOOLCompactDatabase(CString strDatabaseSource, CString strDatabaseDestination)
参数
- CString strDatabaseSource- 源数据库的连接字符串。
- CString strDatabaseDestination- 目标数据库的连接字符串。
备注
连接字符串必须如下:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\the Database Path"。
返回值
如果执行成功,则返回TRUE。
例如
CString strCompactedDBConnection; CString strConnection; CString strCompactedDBPath = _T("C:\\My Projects\\Database\\SampleDB.tmp"); CString strDatabasePath = _T("C:\\My Projects\\Database\\SampleDB.mdb"); strCompactedDBConnection.Format("Provider=Microsoft.Jet.OLEDB." "4.0;Data Source=%s", strCompactedDBPath.GetBuffer(0)); strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s", strDatabasePath.GetBuffer(0)); if(CJetEngine::CCompactDatabase(strConnection, strCompactedDBConnection)) { ::CopyFile(strCompactedDBPath.GetBuffer(0), strDatabasePath.GetBuffer(0), FALSE); }
CADOException 类
CADOException类表示一个异常情况。该类包含公共数据成员,可用于确定异常的原因。
创建一个CADOException对象。
CADOExcpetion();
要检索ADO错误信息
- 构造一个CADOException对象。
- 通过异常对象调用任何异常对象的GetErrorMesaage或GetError成员函数,以检索有关错误的信息。
例如
try { if(pDb.Open(_T("Provider=Microsoft.JET.OLEDB.4.0;") _T("Data source = c:\\vc projects\\ado\\dbTest.mdb;"))) { CADORecordset pRS(&pDb); if(pRS.Open("tbltest", CADORecordset::openTable)) { pRS.SetSort("Descriptions"); . . . } pRS.Close(); } } catch(CADOException &e) { AfxMessageBox(e.GetErrorMessage()); }
CADOException::GetErrorMessage
CString GetErrorMessage() const;
返回值
返回错误描述。
long GetError();
返回值
返回错误代码。
void SetError(long lErrorCode = 0); void SetErrorMessage(LPCSTR lpstrError = _T(""));
参数
- long lErrorCode = 0- 一个包含错误代码的- long值。
- LPCSTR lpstrError = _T("")- 一个包含错误描述的字符串值。
COLEDBDataLink类
COLEDBDataLink类是一个用于创建和编辑数据链接的实用类。
COLEDBDataLink::COLEDBDataLink
创建一个COLEDBDataLink对象。
COLEDBDataLink();
CString New(HWND hWnd = NULL);
throw(COLEDBException);
参数
HWND hWnd = NULL - 父窗口句柄。
返回值
返回一个字符串,告知与创建的连接对应的连接字符串。
void Edit(LPCSTR lpstrConnectionString, HWND hWnd); throw(COLEDBException);
参数
- LPCSTR lpstrConnectionString
- HWND hWnd- 父窗口句柄。
例如
COLEDBDataLink dtlnk; try { dtlnk.Edit("Provider=Microsoft.JET.OLEDB.4.0;Data source" " = c:\\vc projects\\ado\\dbTest.mdb;", this->m_hWnd); } catch(COLEDBException &e) { AfxMessageBox(e.GetErrorMessage()); }
COLEDBException类
COLEDBException类表示一个异常情况。该类包含公共数据成员,可用于确定异常的原因。
COLEDBException::COLEDBException
创建一个COLEDBException对象。
COLEDBException();
要检索OLEDB错误信息
- 构造一个COLEDBException对象。
- 通过异常对象调用任何异常对象的GetErrorMessage或GetError成员函数,以检索有关错误的信息。
例如
CADODatabase pDb; COLEDBDataLink dtlnk; try { pDb.Open(dtlnk.New(this->m_hWnd)); } catch(COLEDBException &e) { AfxMessageBox(e.GetErrorMessage()); }
COLEDBException::GetErrorMessage
CString GetErrorMessage() const;
返回值
返回错误描述。
long GetError();
返回值
返回错误代码。
void SetError(long lErrorCode = 0); void SetErrorMessage(LPCSTR lpstrError = _T(""));
参数
- long lErrorCode = 0- 一个包含错误代码的- long值。
- LPCSTR lpstrError = _T("")- 一个包含错误描述的字符串值。
常见问题
如何将MS DataGrid控件绑定到CADORecordset
- 第一步:您需要将MS DataGrid控件添加到您的应用程序。
- 第二步:将CADORecordset::GetRecordset函数应用于数据控件类的SetRefDataSource函数。
if(m_pRs.Open("tblTest", CADORecordset::openTable)) { //m_datagridctrl is the CDataGrid Class... m_datagridctrl.SetCaption("Clients"); m_datagridctrl.SetRefDataSource(NULL); m_datagridctrl.SetRefDataSource((LPUNKNOWN)m_pRs.GetRecordset()); m_datagridctrl.Refresh(); }
有关如何将数据控件添加到项目的参考,请参阅Rashid Thadha的这篇文章。
如何重新排序记录集?
答案很简单。您有几个函数和属性属于_RecordsetPtr。使用CADORecordset::GetRecordset(),您可以获得一个指向_RecordsetPtr的指针。您可以使用它来设置Sort属性。
注意:您不需要使用_RecordsetPtr::Refresh()。
if(m_pRs.Open("tblTest", CADORecordset::openTable)) { m_pRs.GetRecordset()->PutSort("Field01 DESC"); }
现在:您有了函数CADORecordset::SetSort();
fatal error C1010: 查找预编译头指令时意外文件尾
要解决这个常见问题,您需要使用自动使用预编译头。选择Project/Settings(或ALT+F7),然后在Project Settings对话框中,在组合框中选择C/C++选项卡,然后选择Precompiled Headers项目,并选择Automatic use of precompiled headers选项。
如何从SQL Server存储过程获取返回码?
您必须使用CADOParameter类。CADOParameter::paramReturnValue获取存储过程返回的值。它必须始终是整数,并且必须是参数列表中的第一个。如果您不使用输入或输出参数,则只需使用此参数...
我一直在尝试使用CADOCommand类,并能够传递UUID字段。到目前为止我还没有太成功。您碰巧有一个示例可以展示这一点吗?
您说的是uniqueidentifier类型字段吗?好吧,问题是这样的:
首先,您可以使用SQL语法NEWID()来更新表。该命令将为您生成一个唯一的标识符字符串,例如:"{B6B83A8C-F92C-4FA7-9641-631143E6056C}"...如果您想将数据插入到这种类型的字段中,您需要使用这样的字符串...总之,我们可以说:您需要使用字符串参数类型,采用GUID格式,并且它必须是唯一的...没有很多条件!!!...
但我写了一个示例:在下面的示例中,您可以看到我使用了UUID参数作为字符串。您可以在存储过程中看到参数是uniqueidentifier类型。
//Visual C++ Sample CADOParameter pParamRet(CADORecordset::typeInteger, sizeof(int), CADOParameter::paramReturnValue); CADOParameter pParamInChar(CADORecordset::typeChar, sizeof(char) * 40, CADOParameter::paramInput); CADOParameter pParamID(CADORecordset::typeInteger, sizeof(int)); CString strUUID = CString("{B6B83A8C-F92C-4FA7-9641-631143E6056C}"); pParamInChar.SetValue(strUUID); pParamID.SetValue(1); CADOCommand pCmd(&m_pDB, "sp_UUIDTest"); pCmd.AddParameter(&pParamRet); pCmd.AddParameter(&pParamInChar); pCmd.AddParameter(&pParamID); if(pRs.Execute(&pCmd)) { int nVal = 0; pParamRet.GetValue(nVal); }
//SQL SCRIPT
Create Procedure sp_UUIDTest
@UUID uniqueidentifier = NULL,
@ID integer
AS
    UPDATE
        systable01
    SET
        UUID = @UUID
    WHERE
        sysfield00 = @ID
    
    if @@Error = 0
        return 1
    else
        return 99
GO
ADO和ADOX在一起
我每天收到很多电子邮件,询问我如何一起使用ADO和ADOX类。答案是,现在,从ADO 2.10版本开始,您可以将两种类型的类一起使用。为此,您必须包含每个类的头文件和CPP文件,然后必须在项目中包含头文件。
备注
非常重要的是要验证包含的顺序。首先是ADOX类的头文件,然后是ADO类的头文件。
#include <adox.h> #include <ado2.h>
Carlos A. Antollini。
更新
- 2001年4月25日 - 发布版本 1.0。
- 2001年5月20日 - 版本 1.1添加了以下函数: - AbsolutePage,- GetPageCount,- PageSize,- AbsolutePosition,- GetFieldInfo,- GetChunk,- GetString。
 
- 2001年6月29日 - 版本 1.2添加了以下函数: - AddNew,- Edit,- Delete,- Update,- CancelUpdate,- SetFieldValue,- Find,- FindFirst,- FindNext,- SetBookmark,- GetBookmark。
 
- 2001年9月29日 - 版本 1.25- 增加了对SQL Server 2000的支持。
- 修正了Robert Pittenger报告的关于空字段的错误。
 
- 2001年10月10日 - 版本 1.30- 修正了Giles Forster和Rainer Mangold在SetFieldValue中关于空字段的错误。
- 添加了数据类型枚举。
 
- 修正了Giles Forster和Rainer Mangold在
- 2001年11月5日 - 版本 1.37- 更新以增加将DataGrid绑定到CADORecodset的能力。
- 添加了函数GetLastErrorString,并更改了GetLastError返回的数据类型。
- 添加了函数Clone和SetFilter(由Marcel Stoica请求)。
 
- 更新以增加将DataGrid绑定到
- 2002年1月15日 - 版本 1.40- 添加了由Giles Forster编写的新的GetChunk和AppendChunk函数。
 
- 添加了由Giles Forster编写的新的
- 2002年2月15日 - 版本 1.45- 修正了J. C. Martinez Galán报告的关于十进制字段的错误。
- 添加了XML支持。
 
- 2002年4月4日 - 版本 2.00- 添加了CADOParameter和CADOCommand类。
 
- 添加了
- 2002年5月14日 - 版本 2.01- 在CADORecordset::GetFieldValue和CADORecordset::SetFieldValue中添加了COleCurrency和bool。
 
- 在
- 2002年7月25日 - 版本 2.04- 添加了CADODatabase::GetRecordsAffcetd、CADOCommand::GetRecordsAffected、CADOCommand::Execute、CADOParameter::SetPrecision、CADOParamater::SetScale,并修正了CADOCommand::AddParameter中的错误。
 
- 添加了
- 2003年7月2日 - 版本 2.10- 增加了与ADOX类的兼容性,以便一起使用。(由数百名用户要求。)
- 添加了CADODatabase::SetConnectionMode、CADORecordset::OpenSchema。
- 添加了CJetEngine::CCompactDatabase。
 
- 2003年10月2日 - 版本 2.11- Jan Stocker修复了CADOCommand中的内存泄漏。
 
- Jan Stocker修复了
- 2004年8月8日 - COLEDBDataLink在1.01版本下创建。- 创建了COLEDBDataLink类,并将其添加到ADO类中。
 
- 创建了
- 2005年2月10日 - 版本 2.15- 添加了CADOException类。
 
- 添加了
特别感谢
这些类收到了许多用户的建议。感谢所有人的合作。
- Rainer Mangold
- Christian Graus
- Mike Osbahr
- Francis BONTHOUX
- Spiros Prantalos
- Robert Pittenger
- Giles Forster
- Rob Sandhu
- Marcel Stoica
- Daniel Berman
- Jan Stocker
- 以及大量要求新版本的人。


