一组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
- 一个指向包含SQLSELECT
语句的字符串的指针。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_SCHEMA COLLATION_NAME |
schemaColumnPrivileges |
13 |
返回目录中由给定用户可用或授予的表列的权限。 |
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME GRANTOR GRANTEE |
schemaColumns |
4 |
返回目录中由给定用户访问的表(包括视图)的列。 |
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME |
schemaColumnsDomainUsage |
11 | 返回目录中依赖于由给定用户拥有的目录中定义的域的列。 | DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME COLUMN_NAME |
schemaConstraintColumnUsage |
6 | 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的列。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME |
schemaConstraintTableUsage |
7 | 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的表。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME |
schemaCubes |
32 | 返回架构(或目录,如果提供程序不支持架构)中可用多维数据集的信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME |
schemaDBInfoKeywords |
30 | 返回提供程序特定的关键字列表。 | <无> |
schemaDBInfoLiterals |
31 | 返回文本命令中使用的提供程序特定字面量的列表。 | <无> |
schemaDimensions |
33 | 返回给定多维数据集的维度信息。它为每个维度有一行。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_NAME DIMENSION_UNIQUE_NAME * |
schemaForeignKeys |
27 | 返回由给定用户在目录中定义的外部键列。 | PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME FK_TABLE_CATALOG FK_TABLE_SCHEMA FK_TABLE_NAME |
schemaHierarchies |
34 | 返回维度中可用的层次结构信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME *HIERARCHY_NAME HIERARCHY_UNIQUE_NAME * |
schemaIndexes |
12 | 返回目录中由给定用户拥有的索引。 | TABLE_CATALOG TABLE_SCHEMA INDEX_NAME TYPE TABLE_NAME |
schemaKeyColumnUsage |
8 | 返回目录中由给定用户约束为主键的列。 | CONSTRAINT_CATALOG *CONSTRAINT_SCHEMA *CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME |
schemaLevels |
35 | 返回维度中可用的级别信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME *HIERARCHY_UNIQUE_NAME *LEVEL_NAME LEVEL_UNIQUE_NAME * |
schemaMeasures |
36 | 返回可用度量的信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME MEASURE_NAME MEASURE_UNIQUE_NAME * |
schemaMembers |
38 | 返回可用成员的信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME *HIERARCHY_UNIQUE_NAME *LEVEL_UNIQUE_NAME *LEVEL_NUMBER MEMBER_NAME MEMBER_UNIQUE_NAME *MEMBER_CAPTION MEMBER_TYPE 树运算符(有关更多信息,请参阅OLE DB for OLAP文档。) |
schemaPrimaryKeys |
28 | 返回由给定用户在目录中定义的主键列。 | PK_TABLE_CATALOG PK_TABLE_SCHEMA PK_TABLE_NAME |
schemaProcedureColumns |
29 | 返回由过程返回的行集的信息。 | PROCEDURE_CATALOG *PROCEDURE_SCHEMA PROCEDURE_NAME COLUMN_NAME |
schemaProcedureParameters |
26 | 返回过程的参数和返回码的信息。 | PROCEDURE_CATALOG *PROCEDURE_SCHEMA PROCEDURE_NAME PARAMETER_NAME |
schemaProcedures |
16 | 返回目录中由给定用户拥有的过程。 | PROCEDURE_CATALOG *PROCEDURE_SCHEMA PROCEDURE_NAME PROCEDURE_TYPE |
schemaProperties |
37 | 返回维度中每个级别的可用属性信息。 | CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME *HIERARCHY_UNIQUE_NAME *LEVEL_UNIQUE_NAME *MEMBER_UNIQUE_NAME *PROPERTY_TYPE PROPERTY_NAME |
schemaProviderSpecific |
-1 | 如果提供程序定义了自己的非标准架构查询,则使用。 | <提供程序特定> |
schemaProviderTypes |
22 | 返回数据提供程序支持的数据类型(基类型)。 | DATA_TYPE BEST_MATCH |
schemaReferentialConstraints |
9 | 返回目录中由给定用户拥有的参照约束。 | CONSTRAINT_CATALOG *CONSTRAINT_SCHEMA *CONSTRAINT_NAME |
schemaSchemata |
17 | 返回由给定用户拥有的架构(数据库对象)。 | CATALOG_NAME SCHEMA_NAME SCHEMA_OWNER |
schemaSQLLanguages |
18 | 返回SQL实现处理目录中定义的数据所支持的符合性级别、选项和方言。 | <无> |
schemaStatistics |
19 | 返回目录中由给定用户拥有的统计信息。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME |
schemaTableConstraints |
10 | 返回目录中由给定用户拥有的表约束。 | CONSTRAINT_CATALOG *CONSTRAINT_SCHEMA *CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE |
schemaTablePrivileges |
14 | 返回目录中由给定用户可用或授予的表权限。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME GRANTOR GRANTEE |
schemaTables |
20 | 返回目录中由给定用户访问的表(包括视图)。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE |
schemaTranslations |
21 | 返回目录中由给定用户访问的字符转换。 | TRANSLATION_CATALOG *TRANSLATION_SCHEMA *TRANSLATION_NAME * |
schemaTrustees |
39 | 预留。 | |
schemaUsagePrivileges |
15 | 返回目录中由给定用户可用或授予的对象的 USAGE 权限。 | OBJECT_CATALOG OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE GRANTOR GRANTEE |
schemaViewColumnUsage |
24 | 返回由给定用户拥有的、在目录中定义的视图所依赖的列。 | VIEW_CATALOG VIEW_SCHEMA VIEW_NAME |
schemaViews |
23 | 返回目录中由给定用户访问的视图。 | TABLE_CATALOG TABLE_SCHEMA TABLE_NAME |
schemaViewTableUsage |
25 | 返回由给定用户拥有的、在目录中定义的视图所依赖的表。 | VIEW_CATALOG VIEW_SCHEMA VIEW_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
- 以及大量要求新版本的人。