Objet Command (Fournisseur OLE DB pour DB2)
L’objet Command est créé par un consommateur OLE DB ou par un fournisseur de services pour le compte d’un consommateur. Un objet Command est utilisé pour exécuter une commande spécifique à l’architecture de base de données relationnelle distribuée (DRDA) sur un serveur de base de données DB2 distant fonctionnant en tant que serveur d’applications DRDA. L’objet Command prend en charge l’exécution de commandes langage SQL (SQL) lorsqu’il est connecté pour supprimer les serveurs d’applications DRDA.
Les commandes sont utilisées pour la définition des données, comme la création d’une table ou l’octroi de privilèges, et la manipulation des données, comme la mise à jour ou la suppression de lignes. Un cas particulier de manipulation de données à l’aide de l’objet Command est la création d’ensembles de lignes basés sur des tables DB2. Lorsque vous utilisez le texte de la commande avec des serveurs de base de données DB2, les noms de table spécifiés dans une commande sont transmis par défaut en majuscules. Si un nom de table utilise une casse mixte, le nom de la table doit être passé dans une chaîne entre guillemets.
Avant qu’un consommateur puisse utiliser une commande, il doit déterminer si les commandes sont prises en charge. Pour ce faire, le consommateur appelle QueryInterface pour IDBCreateCommand sur une session. Si cette interface est exposée, le fournisseur prend en charge les commandes. Pour créer une commande, le consommateur appelle ensuite IDBCreateCommand ::CreateCommand sur la session. Une seule session peut être utilisée pour créer plusieurs commandes.
Lorsque la commande est créée pour la première fois, elle ne contient pas de texte de commande. Le consommateur définit le texte de la commande avec ICommandText ::SetCommandText. Étant donné que la syntaxe de la commande de texte est propre au fournisseur, le consommateur transmet l’identificateur global unique (GUID) de la syntaxe à utiliser. Pour une utilisation avec Fournisseur OLE DB Microsoft pour DB2, le GUID est DBGUID_DBSQL. Notez que sous Fournisseur OLE DB pour DB2, ce GUID signifie que la commande de texte est un sous-ensemble d’ANSI SQL. Le niveau auquel le fournisseur prend en charge ANSI SQL est spécifié par la propriété DBPROP_SQLSUPPORT. Cette propriété est un masque de bits spécifiant le niveau de prise en charge de SQL.
La syntaxe prise en charge par le fournisseur OLE DB pour DB2 pour le texte de commande est la Entry-Level ANSI SQL 92 (avec quelques exceptions basées sur la plateforme et la version du serveur DB2).
Les commandes SQL valides sont documentées dans les publications suivantes publiées par IBM :
Référence SQL DB2 pour z/OS version 9
Référence SQL DB2 pour z/OS version 8
DB2 pour IBM i SQL Reference Version 6 Version 1
DB2 pour IBM i SQL Reference Version 5 Version 4
DB2 for LUW SQL Reference Version 9
Pour exécuter la commande, le consommateur appelle ICommand ::Execute. Si le texte de la commande spécifie la commande permettant d’ouvrir un ensemble de lignes, Execute instancie l’ensemble de lignes et retourne un pointeur d’interface vers celui-ci.
Les interfaces suivantes de l’objet Command sont prises en charge par la version actuelle du fournisseur OLE DB pour DB2 :
IAccessor
IColumnsInfo
ICommand
ICommandPrepare
ICommandProperties
ICommandText
ICommandWithParameters
IConvertType
ISupportErrorInfo
Lors de l’utilisation de l’objet ICommand, Fournisseur OLE DB Microsoft pour DB2 ne peut pas dériver les informations de type de paramètre du magasin de données, en fonction de la plateforme ET de la version DB2. L’application cliente OLE DB peut fournir les informations de type de paramètre natif via la fonction ICommandWithParameters ::SetParameterInfo . Le fournisseur OLE DB utilise les informations de type spécifiées par SetParameterInfo pour déterminer comment convertir les données de paramètre du type fourni par le consommateur (comme indiqué par la valeur wType dans la structure de liaison) en type natif utilisé par le magasin de données. Lorsque le consommateur spécifie un type de données avec des valeurs de précision, d’échelle et de taille connues, toutes les informations fournies par le consommateur pour la précision, l’échelle ou la taille sont ignorées par le fournisseur OLE DB pour DB2.
Les informations fournies par le consommateur doivent être correctes et doivent être fournies pour tous les paramètres. Le fournisseur OLE DB pour DB2 peut vérifier les informations fournies par rapport aux métadonnées de paramètre, en fonction de la plateforme ET de la version DB2, bien que le fournisseur OLE DB détermine toujours que les valeurs spécifiées sont des valeurs légales pour le fournisseur. Les informations fournies par le consommateur doivent être correctes et doivent être fournies pour tous les paramètres. Le fournisseur OLE DB pour DB2 ne peut pas vérifier les informations fournies par rapport aux métadonnées de paramètre, bien que le fournisseur OLE DB puisse déterminer que les valeurs spécifiées sont des valeurs légales pour le fournisseur. Le résultat de l’exécution d’une commande à l’aide d’informations de paramètre incorrectes ou de la transmission d’informations de paramètre pour le nombre incorrect de paramètres n’est pas défini. Par exemple, si le type de paramètre est LONG et que le consommateur spécifie un indicateur de type de DBTYPE_STR dans ICommandWithParameters ::SetParameterInfo, le fournisseur OLE DB pour DB2 convertit les données en chaîne avant de les envoyer au magasin de données. Étant donné que le magasin de données ne s’attend pas à un LONG, cela entraînera probablement une erreur.