Command 对象由 OLE DB 使用者创建,或者由服务提供程序代表使用者创建。 Command 对象用于在作为 DRDA 应用程序服务器运行的远程 DB2 数据库服务器上执行分布式关系数据库体系结构 (DRDA) 特定的命令。 Command 对象支持在连接到删除 DRDA 应用程序服务器时执行结构化查询语言 (SQL) 命令。
命令用于数据定义,例如创建表或授予权限,以及数据操作(如更新或删除行)。 使用 Command 对象进行数据操作的一种特殊情况是基于 DB2 表创建行集。 将命令文本用于 DB2 数据库服务器时,命令中指定的表名称默认以大写形式传递。 如果表名使用混合大小写,则必须在带引号的字符串中传递表名。
在使用者可以使用命令之前,它必须确定命令是否受支持。 为此,使用者在会话上调用 QueryInterface for IDBCreateCommand 。 如果公开此接口,则提供程序支持命令。 若要创建命令,使用者随后在会话上调用 IDBCreateCommand::CreateCommand 。 单个会话可用于创建多个命令。
首次创建命令时,它不包含命令文本。 使用者使用 ICommandText::SetCommandText 设置命令文本。 由于文本命令语法特定于提供程序,因此使用者传递要使用的语法的全局唯一标识符 (GUID) 。 若要与 DB2 的 Microsoft OLE DB 提供程序 一起使用,DBGUID_DBSQL GUID。 请注意,在 OLE DB Provider for DB2 下,此 GUID 表示文本命令是 ANSI SQL 的子集。 提供程序支持 ANSI SQL 的级别由 DBPROP_SQLSUPPORT 属性指定。 此属性是指定 SQL 支持级别的位掩码。
OLE DB Provider for DB2 支持的命令文本语法 Entry-Level ANSI SQL 92 (,但根据 DB2 服务器平台和版本) 存在一些例外情况。
IBM 发布的以下发布中记录了有效的 SQL 命令:
DB2 for z/OS SQL 参考版本 9
DB2 for z/OS SQL 参考版本 8
DB2 for IBM i SQL 参考版本 6 版本 1
DB2 for IBM i SQL 参考版本 5 版本 4
DB2 for LUW SQL 参考版本 9
若要执行命令,使用者将调用 ICommand::Execute。 如果命令文本指定用于打开行集的命令, 则 Execute 将实例化行集并返回指向该行集的接口指针。
当前版本的 OLE DB Provider for DB2 支持 Command 对象的以下接口:
IAccessor
IColumnsInfo
ICommand
ICommandPrepare
ICommandProperties
ICommandText
ICommandWithParameters
IConvertType
ISupportErrorInfo
使用 ICommand 对象时,DB2 的 Microsoft OLE DB 提供程序可能不会从数据存储派生参数类型信息,具体取决于 DB2 平台和版本。 OLE DB 客户端应用程序可以通过 ICommandWithParameters::SetParameterInfo 函数提供本机参数类型信息。 OLE DB 访问接口使用 SetParameterInfo 指定的类型信息来确定如何将参数数据从使用者 (提供的类型(如绑定结构) wType 值指示)转换为数据存储使用的本机类型。 当使用者指定具有已知精度、小数位数和大小值的数据类型时,OLE DB 访问接口 for DB2 将忽略使用者提供的任何精度、小数位数或大小信息。
使用者提供的信息应正确,并且应为所有参数提供。 OLE DB Provider for DB2 可能会根据参数元数据验证提供的信息,具体取决于 DB2 平台和版本,尽管 OLE DB 提供程序将始终确定指定的值是提供程序的合法值。 使用者提供的信息必须正确,并且必须为所有参数提供。 OLE DB Provider for DB2 无法根据参数元数据验证提供的信息,尽管 OLE DB 提供程序可以确定指定的值是提供程序的合法值。 未定义使用错误参数信息执行命令或为错误数量的参数传递参数信息的结果。 例如,如果参数类型为 LONG ,并且使用者在 ICommandWithParameters::SetParameterInfo 中指定DBTYPE_STR的类型指示器,则 OLE DB Provider for DB2 会将数据转换为字符串,然后再将其发送到数据存储。 由于数据存储不需要 LONG,这可能会导致错误。