CDynamicParameterAccessor 类
类似于 CDynamicAccessor ,但通过调用 ICommandWithParameters 接口获取要调用的参数信息。
语法
class CDynamicParameterAccessor : public CDynamicAccessor
要求
标头: atldbcli.h
成员
方法
名称 | 描述 |
---|---|
CDynamicParameterAccessor | 构造函数。 |
GetParam | 从缓冲区中检索参数数据。 |
GetParamCount | 检索访问器中的参数数目。 |
GetParamIO | 确定指定参数是输入参数还是输出参数。 |
GetParamLength | 检索存储在缓冲区中的指定参数的长度。 |
GetParamName | 检索指定参数的名称。 |
GetParamStatus | 检索存储在缓冲区中的指定参数的状态。 |
GetParamString | 检索存储在缓冲区中的指定参数的字符串数据。 |
GetParamType | 检索指定参数的数据类型。 |
SetParam | 使用参数数据设置缓冲区。 |
SetParamLength | 设置存储在缓冲区中的指定参数的长度。 |
SetParamStatus | 设置存储在缓冲区中的指定参数的状态。 |
SetParamString | 设置存储在缓冲区中的指定参数的字符串数据。 |
备注
访问接口必须支持 ICommandWithParameters
以便使用者使用此类。
参数信息存储在由此类创建和管理的缓冲区中。 通过使用 GetParam 和 GetParamType从缓冲区中获取参数数据。
有关演示如何使用此类执行 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 类