| |||||||||||||
auteur : Jean-Marc Rabilloud | |||||||||||||
Lorsqu'on utilise des objets Command, il peut y avoir nécessité de préciser à quoi réfère le texte passé dans la propriété CommandText. Cela se fait par le biais de la propriété CommandType qui peut prendre les valeurs suivantes :
Cependant, seul l'objet OleDbCommand du fournisseur managé OLEDB accepte la valeur d'énumération TableDirect, ce qui explique l'erreur obtenue. Il est cependant assez facile de créer un scénario contournant le problème.
Imaginons un code utilisant le fournisseur managé SQL Server. devant afficher le contenu de table non connue à la création ; la table sera sélectionnée par un ComboBox, le contenu affiché dans un DataGridView
Si ce code est fonctionnel, c'est une horreur en termes de pratique de codage et de sécurité.
A lire sur le sujet :
| |||||||||||||
lien : http://www.sommarskog.se/dynamic_sql.html#objectnames |
| ||
auteur : Jean-Marc Rabilloud | ||
L'objet DataReader fonctionne en mode connecté, il est exclusif sur sa connexion. Cela veut dire Que sur une même connexion, il ne peut y avoir plus d'un DataReader ouvert en même temps. Vous devez soit fermer un des DataReader, soit utiliser deux connexions
|
| ||||
auteur : Jean-Marc Rabilloud | ||||
Cela va dépendre principalement de comment sont rédigées les procédures stockées. Il s'agit toutefois d'un sujet assez complexe qui demanderait une étude beaucoup plus longue qu'une réponse dans cette FAQ.
Pour faire simple, on travaille soit sur l'interception des erreurs et/ou des messages de la connexion, soit en interprétant les paramètres renvoyés par la procédure.
Commençons par la gestion des erreurs sur la connexion. Imaginons la procédure stockée suivante :
Celle-ci va générer des erreurs différentes avec des sévérités différentes selon les cas.
Pour intercepter ces erreurs, nous allons utiliser l'objet SQLException.
Dans cet exemple, nous allons traiter à la fois l'évènement InfoMessage puisque certaine sévérité sont inférieure à 10 et SQLException pour les sévérités supérieures.
Lors de l'exécution, nous allons donc avoir soit l'affichage de la quantité, soit affichage des messages d'erreurs.
Travaillons maintenant par récupération de paramètre. Généralement on utilise le paramètre @@ERROR dans SQL Server. Donc, imaginons la procédure stockée suivante :
On va alors pouvoir accéder à l'erreur en interceptant l'erreur lors de l'exécution de la commande puis en lisant le paramètre de retour pERROR, comme dans le cas suivant si vous cliquez deux fois de suite sur le bouton :
|
| ||
auteur : Jean-Marc Rabilloud | ||
C'est relativement simple. On part toujours d'un objet command. On place le nom de la procédure stockée dans la propriété CommandText et on valorise la propriété CommandType sur 'StoredProcedure'. On gère alors les différents paramètres. L'exécution de la commande déclenchera alors l'exécution de la procédure stockée.
Une bonne connaissance de celle-ci est parfois nécessaire pour gérer les réponses complexes. En effet, une procédure peut renvoyer plusieurs résultats différents sous la forme de paramètre ou de jeu d'enregistrements.
Prenons la procédure suivante :
Elle utilise un paramètre d'entrée (l'identifiant de l'auteur), un paramètre de sortie (le nombre de livre écrit par l'auteur), un paramètre de retour (la valeur d'erreur) et éventuellement le jeu d'enregistrement correspondant à la requête. On pourrait exploiter cette procédure avec le code suivant :
|
| ||
auteur : Jean-Marc Rabilloud | ||
Un paramètre de retour est renvoyé par la commande Return de la procédure stockée, un paramètre de sortie est déclaré comme tel dans la procédure. Une procédure peut utiliser simultanément les deux types de paramètre. Pour fonctionner, le code ADO.NET doit utiliser la bonne définition des paramètres. Par exemple, pour exploiter la procédure stockée suivante
Nous pourrions avoir un code comme :
Notez que le nom donné au paramètre de retour donné dans le code n'existe pas dans la procédure stockée. Cependant celui-ci mappe bien la valeur retournée par la procédure stockée.
|
| ||
auteur : Jean-Marc Rabilloud | ||
On peut ajouter des requêtes stockées dans une base Access soit à l'aide de la bibliothèque ADOX, soit en utilisant la requête DDL "CREATE PROCEDURE".
L'exemple suivant crée deux requêtes une non paramétrée et une paramétrée dans la base Access Northwind.mdb :
|
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.