2009-06-15 7 views
0

Quelle est la meilleure façon de renvoyer le résultat de l'exécution d'une procédure stockée SQL Server au code .NET? Si je veux renvoyer le succès ou l'échec d'un groupe de suppressions dans une transaction, devrais-je 'Sélectionner' quelque chose, ou peut-être quelque chose comme RETOUR (1) ou RETOUR (0), ou dois-je communiquer le nombre de lignes affecté?Comment renvoyer le résultat de la procédure stockée Sql Server à .Net

Alors sera-ce la valeur de retour pour ExecuteNonQuery()?

Répondre

2

ExecuteNonQuery renvoie toujours le nombre de lignes affectées pour l'insertion, la mise à jour ou la suppression effectuées dans votre transaction. Vous n'avez pas besoin de RETURN (1) ou RETURN (0).

Si vous effectuez un grand nombre de suppressions dans une transaction et que cela échoue, une exception SqlException est générée, de sorte qu'il n'est pas vraiment nécessaire de renvoyer un résultat en soi. Attrapez simplement l'exception et manipulez-la à la place.

Et pour répondre à votre question, si le résultat que vous vouliez est spécifiquement le nombre d'enregistrements affectés de la dernière instruction exécutée, alors utiliser ExecuteNonQuery est le meilleur. Si vous voulez un autre résultat plus spécifique, le mieux est d'utiliser SqlCommand avec un SqlParameter de retour et de renvoyer la valeur spécifique dans votre paramètre return.

+0

RETURN est mieux utilisé lorsque vous avez besoin de renvoyer un résultat spécifique autre que le nombre d'enregistrements affectés des dernières instructions exécutées. Pour obtenir la valeur retournée, vous devrez utiliser un SqlCommand qui a un paramètre SqlParameter. – Fung

1

Oui, si vous utilisez ExecuteNonQuery(), il retournera le nombre de lignes affectées. Si vous souhaitez spécifier une valeur à renvoyer dans votre procédure stockée, vous pouvez utiliser ExecuteScalary().

Vous pouvez également utiliser un paramètre de sortie pour renvoyer des valeurs. Dans la procédure SQL, déclarez le paramètre en tant que paramètre de sortie (ex: @ret int output). Dans le code .NET, définissez la direction du paramètre à afficher. Après la ligne d'exécution, vous pouvez vérifier cette valeur en lisant la propriété ".Value"

+0

Merci, quelle est la meilleure façon de retourner la valeur pour ExecuteScalar()? en utilisant RETURN? – CRice

+1

Pour retourner une valeur en utilisant ExeculteScalar, faites simplement un SELECT @@ the_value_you_want_to_return. Il doit s'agir de la dernière instruction SQL que vous exécutez. Cependant, ce n'est pas le moyen le plus efficace car, en interne, un lecteur de données est toujours utilisé. Utilisez un SqlCommand avec un SqlParameter de retour si la performance est vraiment importante. Bien que je dirais que le gain de performance est vraiment très petit. – Fung

+0

Si vous vouliez utiliser ExecuteScalar, vous pouvez simplement renvoyer le nombre de lignes via SELECT. –

1

Vous verrez fréquemment la valeur de retour utilisée pour indiquer un problème avec le retour 0 indiquant que le SP s'est terminé avec succès. J'utilise généralement pour renvoyer des informations sur ce qui s'est passé où l'erreur elle-même ne générerait pas une exception. Dans la plupart de mes applications, j'ai un ensemble standard de codes de retour que je réutilise.

pour fournir une sortie plus détaillée dans des scénarios spécifiques que vous pouvez ensuite utiliser les paramètres de sortie et

Questions connexes