65.9K
CodeProject 正在变化。 阅读更多。
Home

一组ADO类 - 版本 2.20

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (262投票s)

2001年4月25日

Ms-PL

27分钟阅读

viewsIcon

10169269

downloadIcon

45290

使用ADO类进行简单的数据库访问。

概述

概述

我创建这些类是为了方便使用ADO。为此,我创建了CADODatabse类和CADORecordset类。

CADODatabase 类

CADODatabase类包含一组与_ConnectionPtr对应的函数。

CADODatabase::CADODatabase

创建一个CADODatabase对象。

CADODatabase();

CADODatabase::Open

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;

CADODatabase::Execute

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();

CADODatabase::GetRecordCount

GetRecordCount返回查询中受影响的记录数。

DWORD GetRecordCount(_RecordsetPtr m_pRs);

参数

_RecorsetPtr m_Prs - 记录集。

CADODatabase::BeginTransaction

调用此函数开始一个事务。在调用BeginTransaction后,您对数据的更新将在提交事务时生效。

long BeginTransaction();

CADODatabase::CommitTransaction

调用CommitTransaction函数来提交一个事务,例如,将一组编辑和更新保存到一个或多个数据库。

long CommitTransaction();

CADODatabase::RollbackTransaction

调用RollbackTransaction函数来结束当前事务,并将所有数据库恢复到事务开始之前的状态。

long RollbackTransaction();

CADODatabase::IsOpen

IsOpen函数返回与数据库的连接状态。

BOOLIsOpen();

返回值

如果与数据库的连接已打开,则函数返回TRUE

CADODatabase::Close

Close函数关闭到数据库的连接。

void Close();

CADODatabase::SetConnectionString

使用SetConnectionString,您可以插入连接字符串。

void SetConnectionString(LPCTSTR lpstrConnection);

参数

LPCTSTR lpstrConnection - 用于打开数据库的连接字符串。

参见CADODatabase::Open();

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

CADODatabase::GetLastError

GetLastError函数返回最后一个错误代码。

DWORD GetLastError();

CADODatabase::GetLastErrorString

GetLastErrorString函数返回最后一个错误字符串。

CString GetLastErrorString();

CADORecordset 类

CADORecordset类包含一组与_RecordsetPtr对应的函数。

CADORecordset::CADORecordset

创建一个CADORecordset对象。

CADODatabase();
CADORecordset(CADODatabase* pAdoDatabase);

参数

CADODatabase* pAdoDatabase - 一个CADODatabase对象指针。

CADORecordset::Open

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

参见示例

CADORecordset::Execute

Execute函数打开一个记录集。

BOOL Execute(CADOCommand* pCommand);
throw(CADOException);

参数

CADOCommand* pCommand - 一个CADOCommand指针。

返回值

如果执行成功,则返回TRUE

参见示例

CADORecordset::GetQuery;

GetQuery返回包含SQL SELECT语句的字符串。

CString GetQuery();

CADORecordset::SetQuery

void SetQuery(LPCSTR strQuery);

参数

LPCTSTR strQuery - 一个指向包含SQL SELECT语句的字符串的指针。

CADORecordset::RecordBinding

BOOL RecordBinding(CADORecordBinding pAdoRecordBinding);

参数

CADORecordBinding pAdoRecordBinding

CADORecordset::GetRecordCount

GetRecordCount返回记录集中已访问的记录数。

DWORD GetRecordCount();

参见示例

CADORecordset::IsOpen

IsOpen确定记录集是否已打开。

BOOL IsOpen();

返回值

如果记录集未关闭,则此成员函数返回TRUE

CADORecordset::Close

Close函数关闭记录集。

void Close();

参见示例

CADORecordset::GetFieldCount

GetFieldCount函数返回记录集中字段的数量。

long GetFieldCount();

CADORecordset::GetFieldValue

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 - 将存储字段值的对象的引用。

参见示例

CADORecordset::IsFieldNull

IsFieldNull函数确定字段数据是否为null。

BOOL IsFieldNull(LPCTSTR lpFieldName);
BOOL IsFieldNull(int nIndex);
throw(CADOException);

参数

  • LPCTSTR lpFieldName - 指向包含字段名称的字符串的指针。
  • int nIndex - 记录集Fields集合中字段的零基索引,用于按索引查找。

返回值

如果字段数据为null,则此函数返回TRUE

CADORecordset::IsFieldEmpty

IsFieldEmpty函数确定字段数据是否为空。

BOOL IsFieldEmpty(LPCTSTR lpFieldName);
BOOL IsFieldEmpty(int nIndex);
throw(CADOException);

参数

  • LPCTSTR lpFieldName - 指向包含字段名称的字符串的指针。
  • int nIndex - 记录集Fields集合中字段的零基索引,用于按索引查找。

返回值

如果字段数据为空,则此函数返回TRUE

CADORecordset::IsEof

BOOL IsEof();

返回值

如果当前位置没有记录,则此函数返回TRUE

参见示例

CADORecordset::IsBof

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开始。

参见示例

CADORecordset::GetPageCount

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

CADORecordset::GetFieldInfo

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

CADORecordset::GetChunk

此函数返回大型文本或二进制数据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

参见示例

CADORecordset::AppendChunk

此函数将数据追加到大型文本或二进制数据字段。

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);

CADORecordset::GetString

此函数将记录集作为字符串返回。

CString GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, 
                  long numRows = 0);

参数

  • LPCTSTR lpCols - 列分隔符。
  • LPCTSTR lpRows - 行分隔符。
  • LPCTSTR lpNull - 表示null值的表达式。
  • long numRows - 受影响的行数。

CADORecordset::GetLastError

GetLastError函数返回最后一个错误代码。

DWORD GetLastError();

CADORecordset::GetLastErrorString

GetLastErrorString函数返回最后一个错误字符串。

CString GetLastErrorString();

CADORecordset::AddNew

AddNew函数在打开的记录集中添加一条记录。

BOOL AddNew();
throw(CADOException);

返回值

如果执行成功,则返回TRUE

参见示例

CADORecordset::Edit

Edit函数允许在打开的记录集中修改当前记录。

void Edit();

CADORecordset::Delete

Delete函数删除打开的记录集中的当前记录。

BOOL Delete();

返回值

如果执行成功,则返回TRUE

CADORecordset::Update

Update函数更新当前记录中待处理的更新。

BOOL Update();
throw(CADOException);

返回值

如果执行成功,则返回TRUE

参见示例

CADORecordset::CancelUpdate

CancelUpdate函数取消打开的记录集中任何待处理的更新。

void CancelUpdate();

CADORecordset::SetFieldValue

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;

CADORecordset::Find

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();
}

CADORecordset::FindFirst

FindFirst函数使用比较运算符从打开的记录集中的开头查找字符串。

BOOL FindFirst(LPCTSTR lpFind);

参数

LPCTSTR lpFind - 用于查找记录的字符串表达式。

返回值

如果执行成功,则返回TRUE

CADORecordset::FindNext

FindNext函数使用FindFirstFind函数中使用的比较运算符,从最后一个位置在打开的记录集中查找字符串。

BOOL FindNext();

返回值

如果执行成功,则返回TRUE

参见示例

CADORecordset::GetBookmark

GetBookmark函数保存当前记录的位置。

BOOL GetBookmark();

返回值

如果执行成功,则返回TRUE

CADORecordset::SetBookmark

SetBookmark函数随时返回到已保存的位置。

void SetBookmark();

返回值

如果执行成功,则返回TRUE

CADORecordset::SetFilter

SetFilter指示对打开的Recordset中的数据进行筛选。

BOOL SetFilter(LPCTSTR strFilter);
throw(CADOException);

参数

LPCTSTR strFilter - 由一个或多个由ANDOR运算符连接的单个子句组成的字符串。

返回值

如果执行成功,则返回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

CADORecordset::SetSort

SetSort函数为CADORecordset对象中的记录设置排序顺序。

BOOL SetSort(LPCTSTR lpstrCriteria);
throw(CADOException);

参数

LPCTSTR lpstrCriteria - 包含SQL语句的ORDER BY子句的字符串。

返回值

如果执行成功,则返回TRUE

CADORecordset::GetRecordset

GetRecordset函数返回指向打开的记录集的指针。

_RecordsetPtr GetRecordset();

CADORecordset::GetActiveConnection

GetActiveConnection返回活动的连接。

_ConnectionPtr GetActiveConnection();

CADORecordset::Clone

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;

CADORecordset::SaveAsXML

SaveAsXML函数将打开的记录集以XML格式保存在文件中。

BOOL SaveAsXML(LPCTSTR lpstrXMLFile);

参数

LPCTSTR strXMLFile - 一个字符串,指示将保存记录集的文件的完整路径名。

返回值

如果执行成功,则返回TRUE

CADORecordset::OpenXML

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();
}

CADORecordset::OpenSchema

OpenSchema函数从提供程序获取数据库架构信息。

BOOL OpenSchema(int nSchema, LPCTSTR SchemaID = _T(""));
throw(CADOException);

参数

  • int nSchema - 表示架构查询类型的数值。
  • LPCTSTR SchemaID = _T("") - 并非由OLE DB规范定义的提供程序架构查询的GUID。
恒定 描述 约束列
schemaAsserts 0 返回目录中由给定用户拥有的断言。

(ASSERTIONS Rowset)

CONSTRAINT_CATALOG*
CONSTRAINT_SCHEMA*
CONSTRAINT_NAME
schemaCatalogs 1 返回与DBMS可访问的目录相关的物理属性。

(CATALOGS Rowset)

CATALOG_NAME
schemaCharacterSets 2 返回目录中由给定用户访问的字符集。

(CHARACTER_SETS Rowset)

CHARACTER_SET_CATALOG*
CHARACTER_SET_SCHEMA*
CHARACTER_SET_NAME*
schemaCheckConstraints 5 返回目录中由给定用户拥有的检查约束。

(CHECK_CONSTRAINTS Rowset)

CONSTRAINT_CATALOG*
CONSTRAINT_SCHEMA*
CONSTRAINT_NAME
schemaCollations 3

返回目录中由给定用户访问的字符排序规则。

(COLLATIONS Rowset)

COLLATION_CATALOG*
COLLATION_SCHEMA
COLLATION_NAME
schemaColumnPrivileges 13

返回目录中由给定用户可用或授予的表列的权限。

(COLUMN_PRIVILEGES Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
schemaColumns 4

返回目录中由给定用户访问的表(包括视图)的列。

(COLUMNS Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
schemaColumnsDomainUsage 11 返回目录中依赖于由给定用户拥有的目录中定义的域的列。

(COLUMN_DOMAIN_USAGE Rowset)

DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
schemaConstraintColumnUsage 6 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的列。

(CONSTRAINT_COLUMN_USAGE Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
schemaConstraintTableUsage 7 返回目录中由给定用户拥有的,由参照约束、唯一约束、检查约束和断言使用的表。

(CONSTRAINT_TABLE_USAGE Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
schemaCubes 32 返回架构(或目录,如果提供程序不支持架构)中可用多维数据集的信息。

(CUBES Rowset*)

CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
schemaDBInfoKeywords 30 返回提供程序特定的关键字列表。

(IDBInfo::GetKeywords*)

<无>
schemaDBInfoLiterals 31 返回文本命令中使用的提供程序特定字面量的列表。

(IDBInfo::GetLiteralInfo*)

<无>
schemaDimensions 33 返回给定多维数据集的维度信息。它为每个维度有一行。

(DIMENSIONS Rowset*)

CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_NAME
DIMENSION_UNIQUE_NAME*
schemaForeignKeys 27 返回由给定用户在目录中定义的外部键列。

(FOREIGN_KEYS Rowset)

PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
schemaHierarchies 34 返回维度中可用的层次结构信息。

(HIERARCHIES Rowset*)

CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME*
HIERARCHY_NAME
HIERARCHY_UNIQUE_NAME*
schemaIndexes 12 返回目录中由给定用户拥有的索引。

(INDEXES Rowset)

TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
schemaKeyColumnUsage 8 返回目录中由给定用户约束为主键的列。

(KEY_COLUMN_USAGE Rowset)

CONSTRAINT_CATALOG*
CONSTRAINT_SCHEMA*
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
schemaLevels 35 返回维度中可用的级别信息。

(LEVELS Rowset*)

CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
DIMENSION_UNIQUE_NAME*
HIERARCHY_UNIQUE_NAME*
LEVEL_NAME
LEVEL_UNIQUE_NAME*
schemaMeasures 36 返回可用度量的信息。

(MEASURES Rowset*)

CATALOG_NAME
SCHEMA_NAME
CUBE_NAME
MEASURE_NAME
MEASURE_UNIQUE_NAME*
schemaMembers 38 返回可用成员的信息。

(MEMBERS Rowset*)

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 返回由给定用户在目录中定义的主键列。

(PRIMARY_KEYS Rowset)

PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
schemaProcedureColumns 29 返回由过程返回的行集的信息。

(PROCEDURE_COLUMNS Rowset)

PROCEDURE_CATALOG*
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
schemaProcedureParameters 26 返回过程的参数和返回码的信息。

(PROCEDURE_PARAMETERS Rowset)

PROCEDURE_CATALOG*
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMETER_NAME
schemaProcedures 16 返回目录中由给定用户拥有的过程。

(PROCEDURES Rowset)

PROCEDURE_CATALOG*
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE
schemaProperties 37 返回维度中每个级别的可用属性信息。

(PROPERTIES Rowset*)

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 返回数据提供程序支持的数据类型(基类型)。

(PROVIDER_TYPES Rowset)

DATA_TYPE
BEST_MATCH
schemaReferentialConstraints 9 返回目录中由给定用户拥有的参照约束。

(REFERENTIAL_CONSTRAINTS Rowset)

CONSTRAINT_CATALOG*
CONSTRAINT_SCHEMA*
CONSTRAINT_NAME
schemaSchemata 17 返回由给定用户拥有的架构(数据库对象)。

(SCHEMATA Rowset)

CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
schemaSQLLanguages 18 返回SQL实现处理目录中定义的数据所支持的符合性级别、选项和方言。

(SQL_LANGUAGES Rowset)

<无>
schemaStatistics 19 返回目录中由给定用户拥有的统计信息。

(STATISTICS Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
schemaTableConstraints 10 返回目录中由给定用户拥有的表约束。

(TABLE_CONSTRAINTS Rowset)

CONSTRAINT_CATALOG*
CONSTRAINT_SCHEMA*
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
schemaTablePrivileges 14 返回目录中由给定用户可用或授予的表权限。

(TABLE_PRIVILEGES Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
schemaTables 20 返回目录中由给定用户访问的表(包括视图)。

(TABLES Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
schemaTranslations 21 返回目录中由给定用户访问的字符转换。

(TRANSLATIONS Rowset)

TRANSLATION_CATALOG*
TRANSLATION_SCHEMA*
TRANSLATION_NAME*
schemaTrustees 39 预留。  
schemaUsagePrivileges 15 返回目录中由给定用户可用或授予的对象的 USAGE 权限。

(USAGE_PRIVILEGES Rowset)

OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
schemaViewColumnUsage 24 返回由给定用户拥有的、在目录中定义的视图所依赖的列。

(VIEW_COLUMN_USAGE Rowset)

VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
schemaViews 23 返回目录中由给定用户访问的视图。

(VIEWS Rowset)

TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
schemaViewTableUsage 25 返回由给定用户拥有的、在目录中定义的视图所依赖的表。

(VIEW_TABLE_USAGE Rowset)

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)
{
...
}

CADORecordset::Requery

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

创建一个CADOParameter对象。

CADOParameter(int nType, long lSize = 0, int nDirection = paramInput, 
              CString strName = _T(""));

参数

  • int nType - 一个int值,指定CADOParameter对象的数据类型。可以是CADORecordset::GetFieldInfo中指定的任何值。如果您使用CADORecordset::typeNumericCADORecordset::typeDecimal,则必须定义精度标度值。
  • long lSize = 0 - 一个可选的long值,指定参数值(以字节或字符为单位)的最大长度。
  • int nDirection = paramInput - 一个可选的int值,指定CADOParameter对象的方向。可以是以下值之一:
    • CADOParameter::paramUnknown - 表示参数方向未知。
    • CADOParameter::paramInput - 默认值。表示参数是输入参数。
    • CADOParameter::paramOutput - 表示参数是输出参数。
    • CADOParameter::paramInputOutput - 表示参数既是输入参数也是输出参数。
    • CADOParameter::paramReturnValue - 表示参数是返回值。
    • CString strName = _T("") - 一个可选字符串,指定CADOParameter对象的名称。

参见示例

CADOParameter::SetValue

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

参见示例

CADOParameter::SetPrecision

SetPrecison函数设置CADOParameter对象的精度。

void SetPrecision(int nPrecision);

CADOParameter::SetScale

SetScale函数设置CADOParameter对象的标度。

void SetScale(int nScale);

CADOParameter::GetValue

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

参见示例

CADOParameter::SetName

SetName函数设置CADOParameter对象的名称。

CString SetName(CString strName);

参数

CString strName - 指定参数名称的字符串。

CADOParameter::GetName

GetName函数返回CADOParameter对象。

CString GetName();

CADOParameter::GetType

GetType函数返回CADOParameter对象的类型。

int GetType();

CADOParameter::GetParameter

GetParameter函数返回指向_Parameter对象的指针。

_ParameterPtr GetParameter();

CADOCommand 类

CADOCommand类包含一组与_CommandPtr对应的函数。

CADOCommand::CADOCommand

创建一个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.OpenRequery一起使用。

参见示例

CADOCommand::AddParameter

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::typeNumericCADORecordset::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

参见示例

CADOCommand::SetText

SetText函数设置CADOCommand对象的命令文本。

void SetText(CString strCommandText);

参数

CString strCommandText - 指定命令文本的字符串。

CADOCommand::GetText

GetText函数返回CADOCommand对象的命令文本。

CString GetText();

CADOCommand::SetType

SetType函数设置CADOCommand对象的类型。

void SetType(int nCommandType);

参数

int nCommandType - 一个int值,指示命令的类型。

CADOCommand::GetType

GetType函数返回CADOCommand对象的类型。

int GetType();

CADOCommand::GetCommand

GetCommand函数返回一个Command指针。

_CommandPtr GetCommand();

CADOCommand::Execute

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对应的函数。

CJetEngine::CompactDatabase

压缩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::CADOException

创建一个CADOException对象。

CADOExcpetion();

要检索ADO错误信息

  • 构造一个CADOException对象。
  • 通过异常对象调用任何异常对象的GetErrorMesaageGetError成员函数,以检索有关错误的信息。

例如

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;

返回值

返回错误描述。

参见示例

CADOException::GetError

long GetError();

返回值

返回错误代码。

CADOException::SetError

void SetError(long lErrorCode = 0);
void SetErrorMessage(LPCSTR lpstrError = _T(""));

参数

  • long lErrorCode = 0 - 一个包含错误代码的long值。
  • LPCSTR lpstrError = _T("") - 一个包含错误描述的字符串值。

COLEDBDataLink类

COLEDBDataLink类是一个用于创建和编辑数据链接的实用类。

COLEDBDataLink::COLEDBDataLink

创建一个COLEDBDataLink对象。

COLEDBDataLink();

COLEDBDataLink::New

CString New(HWND hWnd = NULL);
throw(COLEDBException);

参数

HWND hWnd = NULL - 父窗口句柄。

返回值

返回一个字符串,告知与创建的连接对应的连接字符串。

参见示例

COLEDBDataLink::Edit

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对象。
  • 通过异常对象调用任何异常对象的GetErrorMessageGetError成员函数,以检索有关错误的信息。

例如

CADODatabase pDb;
COLEDBDataLink dtlnk;

try
{
    pDb.Open(dtlnk.New(this->m_hWnd));
}
catch(COLEDBException &e)
{
    AfxMessageBox(e.GetErrorMessage());
}

COLEDBException::GetErrorMessage

CString GetErrorMessage() const;

返回值

返回错误描述。

参见示例

COLEDBException::GetError

long GetError();

返回值

返回错误代码。

COLEDBException::SetError

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在一起

我每天收到很多电子邮件,询问我如何一起使用ADOADOX类。答案是,现在,从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中关于空字段的错误。
    • 添加了数据类型枚举。
  • 2001年11月5日 - 版本 1.37
    • 更新以增加将DataGrid绑定到CADORecodset的能力。
    • 添加了函数GetLastErrorString,并更改了GetLastError返回的数据类型。
    • 添加了函数CloneSetFilter(由Marcel Stoica请求)。
  • 2002年1月15日 - 版本 1.40
    • 添加了由Giles Forster编写的新的GetChunkAppendChunk函数。
  • 2002年2月15日 - 版本 1.45
    • 修正了J. C. Martinez Galán报告的关于十进制字段的错误。
    • 添加了XML支持。
  • 2002年4月4日 - 版本 2.00
    • 添加了CADOParameterCADOCommand类。
  • 2002年5月14日 - 版本 2.01
    • CADORecordset::GetFieldValueCADORecordset::SetFieldValue中添加了COleCurrencybool
  • 2002年7月25日 - 版本 2.04
    • 添加了CADODatabase::GetRecordsAffcetdCADOCommand::GetRecordsAffectedCADOCommand::ExecuteCADOParameter::SetPrecisionCADOParamater::SetScale,并修正了CADOCommand::AddParameter中的错误。
  • 2003年7月2日 - 版本 2.10
    • 增加了与ADOX类的兼容性,以便一起使用。(由数百名用户要求。)
    • 添加了CADODatabase::SetConnectionModeCADORecordset::OpenSchema
    • 添加了CJetEngine::CCompactDatabase
  • 2003年10月2日 - 版本 2.11
    • Jan Stocker修复了CADOCommand中的内存泄漏。
  • 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
  • 以及大量要求新版本的人。
© . All rights reserved.