c语言command,CCommand 类

CCommand 类

11/04/2016

本文内容

提供设置和执行命令的方法。

语法

template

template class TRowset = CRowset,

class TMultiple = CNoMultipleResults>

class CCommand :

public CAccessorRowset ,

public CCommandBase,

public TMultiple

parameters

TAccessor

你希望命令使用的访问器类的类型(如 CDynamicParameterAccessor、CDynamicStringAccessor 或 CEnumeratorAccessor)。 默认值为 CNoAccessor,它指定该类不支持参数或输出列。

TRowset

您希望命令使用的行集类的类型(如 CArrayRowset 或 CNoRowset)。 默认值为 CRowset。

TMultiple

若要使用可以返回多个结果的 OLE DB 命令,请指定 CMultipleResults。 否则,请使用 CNoMultipleResults。 有关详细信息,请参阅 IMultipleResults。

要求

标头: atldbcli.h

成员

方法

名称

描述

关闭当前命令。

在使用多个结果集时提取下一个结果。

执行并选择性地绑定命令。

继承的方法

名称

说明

为指定会话创建新命令,然后设置命令文本。

获取命令的参数、参数名称和参数类型的列表。

验证并优化当前命令。

在必要时释放参数访问器,然后释放命令。

放弃当前命令执行计划。

备注

需要执行基于参数的操作或执行命令时,请使用此类。 如果只需打开简单行集,请改用 CTable 。

使用的访问器类可确定绑定参数和数据的方法。

请注意,不能将存储过程与 Jet 的 OLE DB 提供程序一起使用,因为该提供程序不支持存储过程(查询字符串中只允许使用常数)。

CCommand:: Close

发布与命令关联的访问器行集。

语法

void Close();

备注

命令使用行集、结果集访问器和(可选的)参数访问器(与不支持参数并且不需要参数访问器的表不同)。

执行命令时,应在命令后同时调用 Close 和 ReleaseCommand 。

当你要重复执行同一命令时,你应通过在调用 Close 之前调用 Execute 来发布每个结果集访问器。 在序列末尾,应通过调用 ReleaseCommand 发布参数访问器。 另一种常见情形是调用具有输出参数的存储过程。 在很多提供程序(如 SQL Server 的 OLE DB 提供程序)上,输出参数值在您关闭结果集访问器前不可访问。 调用 Close 以关闭返回的行集和结果集访问器而不返回参数访问器,从而让你检索输出参数值。

示例

以下示例演示在重复执行同一命令时如何调用 Close 和 ReleaseCommand。

void DoCCommandTest()

{

HRESULT hr;

hr = CoInitialize(NULL);

CCustomer rs; // Your CCommand-derived class

rs.m_BillingID = 6611; // Open billing ID 6611

hr = rs.OpenAll(); // (Open also executes the command)

hr = rs.MoveFirst(); // Move to the first row and print it

_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),

rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);

// Close the first command execution

rs.Close();

rs.m_BillingID = 3333; // Open billing ID 3333 (a new customer)

hr = rs.Open(); // (Open also executes the command)

hr = rs.MoveFirst(); // Move to the first row and print it

_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),

rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);

// Close the second command execution;

// Instead of the two following lines

// you could simply call rs.CloseAll()

// (a wizard-generated method):

rs.Close();

rs.ReleaseCommand();

CoUninitialize();

}

CCommand:: GetNextResult

提取下一个结果集(如果有)。

语法

HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,

bool bBind = true) throw();

parameters

pulRowsAffected

[in/out]一个指向内存的指针,它将返回受命令影响的行计数。

bBind

中指定是否在执行后自动绑定命令。 默认值为 true ,这将导致自动绑定命令。 将 bBind 设置为可 false 阻止自动绑定命令,以便可以手动绑定。 (手动绑定对 OLAP 用户特别感兴趣。 )

返回值

标准的 HRESULT。

备注

如果以前已获取结果集,则此函数将释放以前的结果集并取消绑定列。 如果 bBind 为 true ,则绑定新列。

仅当通过设置 CCommand 模板参数 TMultiple 指定了多个结果时,才应调用此函数 = CMultipleResults 。

CCommand:: Open

执行并选择性地绑定命令。

语法

HRESULT Open(const CSession& session,

LPCWSTR wszCommand,

DBPROPSET *pPropSet = NULL,

DBROWCOUNT* pRowsAffected = NULL,

REFGUID guidCommand = DBGUID_DEFAULT,

bool bBind = true,

ULONG ulPropSets = 0) throw();

HRESULT Open(const CSession& session,

LPCSTR szCommand,

DBPROPSET *pPropSet = NULL,

DBROWCOUNT* pRowsAffected = NULL,

REFGUID guidCommand = DBGUID_DEFAULT,

bool bBind = true,

ULONG ulPropSets = 0) throw();

HRESULT Open(const CSession& session,

INT szCommand = NULL,

DBPROPSET *pPropSet = NULL,

DBROWCOUNT* pRowsAffected = NULL,

REFGUID guidCommand = DBGUID_DEFAULT,

bool bBind = true,

ULONG ulPropSets = 0) throw();

HRESULT Open(DBPROPSET *pPropSet = NULL,

DBROWCOUNT* pRowsAffected = NULL,

bool bBind = true,

ULONG ulPropSets = 0) throw();

parameters

会议

中要在其中执行命令的会话。

wszCommand

中作为 Unicode 字符串传递的要执行的命令。 使用时可以为 NULL CAccessor ,在这种情况下,将从传递给 DEFINE_COMMAND 宏的值中检索命令。 有关详细信息,请参阅 OLE DB 程序员参考 中的 ICommand:: Execute 。

szCommand

中与 wszCommand 相同,只不过此参数使用 ANSI 命令字符串。 此方法的第四种形式可以采用 NULL 值。 有关详细信息,请参阅本主题后面的 "备注"。

pPropSet

中指向包含要设置的属性和值的 DBPROPSET 结构的数组的指针。 请参阅 Windows SDK 中 OLE DB 程序员参考 中的 属性集和属性组。

pRowsAffected

[in/out]一个指向内存的指针,它将返回受命令影响的行计数。 如果 * PROWSAFFECTED 为 NULL,则不返回行计数。 否则, Open 根据以下条件设置 * pRowsAffected :

如果

Then

的 cParamSets 元素 pParams 大于1

* pRowsAffected 表示在执行中指定的所有参数集所影响的总行数。

受影响的行数不可用

* pRowsAffected 设置为-1。

此命令不会更新、删除或插入行

* pRowsAffected 未定义。

guidCommand

中一个 GUID,指定提供程序在分析命令文本时使用的语法和一般规则。 有关详细信息,请参阅 OLE DB 程序员参考 中的 ICommandText:: GetCommandText和 ICommandText:: SetCommandText 。

bBind

中指定是否在执行后自动绑定命令。 默认值为 true ,这将导致自动绑定命令。 将 bBind 设置为可 false 阻止自动绑定命令,以便可以手动绑定。 (手动绑定对 OLAP 用户特别感兴趣。 )

ulPropSets

中在 传入 ppropset 参数中传递的 DBPROPSET结构的数目。

返回值

标准的 HRESULT。

备注

的前三种形式 Open 会创建一个会话,创建一个命令,然后执行该命令,并根据需要绑定任何参数。

的第一种形式 Open 采用 Unicode 命令字符串并且没有默认值。

的第二种形式 Open 采用 ANSI 命令字符串,没有 (提供默认值,以便与现有 ANSI 应用程序) 向后兼容。

的第三种形式 Open 允许命令字符串为 null,因为类型的 int 默认值为 null。 提供此方法是为了调用 Open(session, NULL); 或, Open(session); 因为 NULL 的类型为 int 。 此版本需要并断言 int 参数为 NULL。

Open如果已创建了一个命令并且想要执行单个准备和多个执行,请使用第四种形式的。

备注

Open 调用 Execute ,后者又调用 GetNextResult 。

CCommand:: Create

语法

HRESULT CCommandBase::Create(const CSession& session,

LPCWSTR wszCommand,

REFGUID guidCommand = DBGUID_DEFAULT) throw ();

HRESULT CCommandBase::Create(const CSession& session,

LPCSTR szCommand,

REFGUID guidCommand = DBGUID_DEFAULT) throw ();

parameters

会议

中要在其上创建命令的会话。

wszCommand

中指向命令字符串的 Unicode 文本的指针。

szCommand

中指向命令字符串的 ANSI 文本的指针。

guidCommand

中一个 GUID,指定提供程序在分析命令文本时使用的语法和一般规则。 有关方言的说明,请参阅 OLE DB 程序员参考 中的 ICommandText:: GetCommandText 。

返回值

标准的 HRESULT。

备注

的第一种形式 Create 采用 Unicode 命令字符串。 的第二种形式 Create 采用一个 ANSI 命令字符串 (提供以便与现有 ANSI 应用程序) 向后兼容。

CCommand:: CreateCommand

创建新的命令。

语法

HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();

parameters

会议

中 CSession 要与新命令关联的对象。

返回值

标准的 HRESULT。

备注

此方法使用指定的会话对象创建一个命令。

CCommand:: GetParameterInfo

获取命令的参数、参数名称和参数类型的列表。

语法

HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,

DBPARAMINFO** ppParamInfo,

OLECHAR** ppNamesBuffer) throw ();

parameters

返回值

标准的 HRESULT。

CCommand::P 准备

验证并优化当前命令。

语法

HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();

parameters

cExpectedRuns

中希望执行命令的次数。

返回值

标准的 HRESULT。

备注

CCommand:: ReleaseCommand

释放参数访问器,然后释放命令本身。

语法

void CCommandBase::ReleaseCommand() throw();

备注

ReleaseCommand 与结合使用 Close 。 有关使用情况详细信息,请参阅 Close 。

CCommand:: SetParameterInfo

指定每个命令参数的本机类型。

语法

HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,

const DBORDINAL* pOrdinals,

const DBPARAMBINDINFO* pParamInfo) throw();

parameters

返回值

标准的 HRESULT。

CCommand:: Unprepare

放弃当前命令执行计划。

语法

HRESULT CCommandBase::Unprepare() throw();

返回值

标准的 HRESULT。

备注

请参阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值