类似于 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 类