2009-10-01 8 views
4

Est-il possible d'ajouter plusieurs requêtes à l'objet SqlCommand dans .net?Plusieurs requêtes utilisant une SqlCommand possible?

Et si l'une des requêtes échoue et que le reste réussit, la commande signale-t-elle cela comme un échec ou un succès?

dernière question: les requêtes peuvent-elles partager les mêmes paramètres? Alors, est-ce possible:

UPDATE mytable 
    SET column1 = @param1 
    WHERE recid = @recid; 

UPDATE mytable2 
    SET column1 = @param1 
    WHERE recid = @recid2;  

(de sorte que le param1 est partagé entre les requêtes)

merci!

R

+1

Vous voulez vraiment une transaction pour cela. – Joey

+0

il n'est pas nécessaire qu'il soit atomique ou transactionnel. Je veux juste effectuer un ensemble d'opérations. Je veux juste être sûr que tout le monde a eu fini – Toad

Répondre

9

Vous pouvez avoir plusieurs déclarations dans la CommandText d'un objet SqlCommand, ce n'est pas un problème, et ils peuvent partager des paramètres aussi. Il est essentiellement passé à sp_executesql sur le serveur sql et exécuté. Si vous effectuez plusieurs UPDATEs, vous devrez les faire dans une transaction afin de pouvoir revenir en arrière s'il y a un échec dans l'une des instructions.

Si vous renvoyez plusieurs jeux d'enregistrements, vous pouvez utiliser la méthode NextResult() de SqlDataReader pour obtenir le jeu de résultats suivant.

+0

ok merci ... pas besoin d'une transaction pour moi, puisque je m'en fous si un opf leur est fait si on échoue ... je dois juste savoir s'il y en a d'entre eux échoue ... Savez-vous comment cela est géré? Si quelqu'un d'entre eux échoue, suis-je averti? – Toad

+0

quand vous dites échoue, voulez-vous dire une erreur syntaxique dans l'instruction sql? Ou voulez-vous dire, comme dans l'exemple donné, si l'une des deux instructions UPDATE ne met pas à jour les lignes? Le premier lancera une exception SqlException de nombreuses instructions que vous avez, avec le dernier je pense que vous devriez toujours garder les instructions séparées afin d'évaluer la valeur de retour de 'ExecuteScalar()'/'ExecuteNonQuery()' –

+0

ce dernier. .. ok ... donc vous dites que dans ce cas, je devrais soit séparer les requêtes ou utiliser une bonne transaction? – Toad

Questions connexes