CDynamicParameterAccessor 类

类似于 CDynamicAccessor ,但通过调用 ICommandWithParameters 接口获取要调用的参数信息。

语法

class CDynamicParameterAccessor : public CDynamicAccessor

要求

标头: atldbcli.h

成员

方法

名称 描述
CDynamicParameterAccessor 构造函数。
GetParam 从缓冲区中检索参数数据。
GetParamCount 检索访问器中的参数数目。
GetParamIO 确定指定参数是输入参数还是输出参数。
GetParamLength 检索存储在缓冲区中的指定参数的长度。
GetParamName 检索指定参数的名称。
GetParamStatus 检索存储在缓冲区中的指定参数的状态。
GetParamString 检索存储在缓冲区中的指定参数的字符串数据。
GetParamType 检索指定参数的数据类型。
SetParam 使用参数数据设置缓冲区。
SetParamLength 设置存储在缓冲区中的指定参数的长度。
SetParamStatus 设置存储在缓冲区中的指定参数的状态。
SetParamString 设置存储在缓冲区中的指定参数的字符串数据。

备注

访问接口必须支持 ICommandWithParameters 以便使用者使用此类。

参数信息存储在由此类创建和管理的缓冲区中。 通过使用 GetParamGetParamType从缓冲区中获取参数数据。

有关演示如何使用此类执行 SQL Server 存储过程并获取输出参数值的示例,请参阅 GitHub 上 Microsoft VCSamples 存储库中的 DynamicConsumer 示例代码。

CDynamicParameterAccessor::CDynamicParameterAccessor

构造函数。

语法

typedef CDynamicParameterAccessor _ParamClass;
CDynamicParameterAccessor(
   DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000 )
   : CDynamicAccessor(eBlobHandling, nBlobSize )

参数

eBlobHandling
指定处理 BLOB 数据的方式。 默认值为 DBBLOBHANDLING_DEFAULT。 有关 DBBLOBHANDLINGENUM 值的说明,请参见 CDynamicAccessor::SetBlobHandling

nBlobSize
最大 BLOB 大小(以字节为单位);该值之上的列数据被视为 BLOB。 默认值为 8,000。 有关详细信息,请参阅 CDynamicAccessor::SetBlobSizeLimit

备注

有关 BLOB 处理的详细信息,请参阅 CDynamicAccessor::CDynamicAccessor 构造函数。

CDynamicParameterAccessor::GetParam

从参数缓冲区中检索指定参数的非字符串数据。

语法

template <class ctype>bool GetParam(DBORDINAL nParam,
   ctype* pData) const throw();

template <class ctype> bool GetParam(TCHAR* pParamName,
   ctype* pData) const throw();

void* GetParam(DBORDINAL nParam) const throw();

void* GetParam(TCHAR* pParamName) const throw();

参数

ctype
一个是数据类型的模板化参数。

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pParamName
[in] 参数名称。

pData
[out] 指向包含从缓冲区检索的数据的内存的指针。

返回值

对于非模板版本,指向包含从缓冲区检索的数据的内存。 对于模板化版本,在成功时返回 true,或在失败时返回 false

使用 GetParam 从缓冲区检索非字符串参数数据。 使用 GetParamString 从缓冲区检索字符串参数数据。

CDynamicParameterAccessor::GetParamCount

检索存储在缓冲区中的参数数目。

语法

DB_UPARAMS GetParamCount() const throw();

返回值

参数的数量。

CDynamicParameterAccessor::GetParamIO

确定指定参数是输入参数还是输出参数。

语法

bool GetParamIO(DBORDINAL nParam,
   DBPARAMIO* pParamIO) const throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pParamIO
指向包含指定参数的 DBPARAMIO 类型(输入或输出)的变量的指针。 它的定义如下:

typedef DWORD DBPARAMIO;

enum DBPARAMIOENUM {
    DBPARAMIO_NOTPARAM   = 0,
    DBPARAMIO_INPUT      = 0x1,
    DBPARAMIO_OUTPUT     = 0x2
};

返回值

成功时返回 true,失败时返回 false

CDynamicParameterAccessor::GetParamLength

检索存储在缓冲区中的指定参数的长度。

语法

bool GetParamLength(DBORDINAL nParam,
   DBLENGTH* pLength);

DBLENGTH* GetParamLength(DBORDINAL nParam) const throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pLength
[out] 指向包含指定参数的长度(以字节为单位)的变量的指针。

备注

成功时,第一重写将返回 true,失败时返回 false。 第二个重写指向包含参数的长度的内存。

CDynamicParameterAccessor::GetParamName

检索指定参数的名称。

语法

LPOLESTR GetParamName(DBORDINAL nParam) const throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

返回值

指定参数的名称。

CDynamicParameterAccessor::GetParamStatus

检索存储在缓冲区中的指定参数的状态。

语法

bool GetParamStatus(DBORDINAL nParam,
   DBSTATUS* pStatus);

DBSTATUS* GetParamStatus(DBORDINAL nParam) const throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pStatus
[out] 指向包含 DBSTATUS 状态的变量的指针。 有关 DBSTATUS 值的信息,请参阅 OLE DB 程序员参考中的状态,或在 oledb.h 中搜索 DBSTATUS。

备注

成功时,第一重写将返回 true,失败时返回 false。 第二个重写指向包含指定参数的状态的内存。

CDynamicParameterAccessor::GetParamString

检索存储在缓冲区中的指定参数的字符串数据。

语法

bool GetParamString(DBORDINAL nParam,
   CSimpleStringA& strOutput) throw();

bool GetParamString(DBORDINAL nParam,
   CSimpleStringW& strOutput) throw();

bool GetParamString(DBORDINAL nParam,
   CHAR* pBuffer,
   size_t* pMaxLen) throw();

bool GetParamString(DBORDINAL nParam,
   WCHAR* pBuffer,
   size_t* pMaxLen) throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

strOutput
[out] 指定参数的 ANSI (CSimpleStringA) 或 Unicode (CSimpleStringW) 字符串数据。 应传递 CString 类型的参数,例如:

CString MyString;
rs.GetParamString(1, MyString);

pBuffer
[out] 指向指定参数的 ANSI (CHAR) 或 Unicode (WCHAR) 字符串数据的指针。

pMaxLen
[out] 指向由 pBuffer 指向的缓冲区大小的指针(以字符为单位,包括终止 NULL)。

注解

成功时返回 true,失败时返回 false

如果 pBuffer 为 NULL,此方法将在 pMaxLen 指向的内存中设置所需的缓冲区大小,并返回 true 而不复制数据。

如果缓冲区 pBuffer 不足以包含整个字符串,则此方法将失败。

使用 GetParamString 从缓冲区检索字符串参数数据。 使用 GetParam 从缓冲区检索非字符串参数数据。

CDynamicParameterAccessor::GetParamType

检索指定参数的数据类型。

语法

bool GetParamType(DBORDINAL nParam,
   DBTYPE* pType) const throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pType
[out] 指向包含指定参数的数据类型的变量的指针。

返回值

成功时返回 true,失败时返回 false

CDynamicParameterAccessor::SetParam

使用指定的(非字符串)数据设置参数缓冲区。

语法

template <class ctype>
bool SetParam(DBORDINAL nParam,
   constctype* pData,
   DBSTATUS status = DBSTATUS_S_OK) throw();

template <class ctype>
bool SetParam(TCHAR* pParamName,
   const ctype* pData,
   DBSTATUS status = DBSTATUS_S_OK) throw();

参数

ctype
一个是数据类型的模板化参数。

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 例如:

WCHAR* wszSQL = L"SELECT * FROM Authors WHERE State='?' AND LName='?'";

CCommand<CDynamicParameterAccessor> rs;
//...
rs.SetParam<LONG>(1, &m_BillingID);
rs.SetParam<CString>(2, &m_strFirstName);

pParamName
[in] 参数名称。

pData
[in] 指向包含要写入缓冲区的数据的内存的指针。

status
[in] DBSTATUS 列状态。 有关 DBSTATUS 值的信息,请参阅 OLE DB 程序员参考中的状态,或在 oledb.h 中搜索 DBSTATUS。

返回值

成功时返回 true,失败时返回 false

使用 SetParam 在缓冲区中设置非字符串参数数据。 使用 SetParamString 在缓冲区中设置字符串参数数据。

CDynamicParameterAccessor::SetParamLength

设置存储在缓冲区中的指定参数的长度。

语法

bool SetParamLength(DBORDINAL nParam,
   DBLENGTH length);

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

length
[in] 指定参数的长度(以字节为单位)。

注解

成功时返回 true,失败时返回 false

CDynamicParameterAccessor::SetParamStatus

设置存储在缓冲区中的指定参数的状态。

语法

bool SetParamStatus(DBORDINAL nParam,
   DBSTATUS status);

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

status
[in] 指定参数的 DBSTATUS 状态。 有关 DBSTATUS 值的信息,请参阅 OLE DB 程序员参考中的状态,或在 oledb.h 中搜索 DBSTATUS。

备注

成功时返回 true,失败时返回 false

CDynamicParameterAccessor::SetParamString

设置存储在缓冲区中的指定参数的字符串数据。

语法

bool SetParamString(DBORDINAL nParam,
   constCHAR* pString,
   DBSTATUS status = DBSTATUS_S_OK) throw();bool SetParamString(DBORDINAL nParam,
   constWCHAR* pString,
   DBSTATUS status = DBSTATUS_S_OK) throw();

参数

nParam
[in] 参数号(相对于 1 的偏移量)。 将为返回值保留参数 0。 参数号是基于参数在 SQL 或存储的过程调用中的顺序的参数索引。 有关示例,请参阅 SetParam

pString
[in] 指向指定参数的 ANSI (CHAR) 或 Unicode (WCHAR) 字符串数据的指针。 请参阅 oledb.h 中的 DBSTATUS。

status
[in] 指定参数的 DBSTATUS 状态。 有关 DBSTATUS 值的信息,请参阅 OLE DB 程序员参考中的状态,或在 oledb.h 中搜索 DBSTATUS。

注解

成功时返回 true,失败时返回 false

如果尝试将字符串设置成大于为 pString 指定的最大大小,SetParamString 将失败。

使用 SetParamString 在缓冲区中设置字符串参数数据。 使用 SetParam 在缓冲区中设置非字符串参数数据。

另请参阅

OLE DB 使用者模板
OLE DB 使用者模板参考
CAccessor 类
CDynamicAccessor 类
CManualAccessor 类