2017-01-27 1 views
1

Je cette procédure stockée dans SQL Server 2016:Valeur de retour de la procédure stockée est incorrect

SET NOCOUNT ON; 
SELECT * FROM MyTable; 
RETURN @@ROWCOUNT 

Quand je lance cette procédure dans SSMS la valeur de retour est 43, comme cela devrait être.

Je cet extrait de code dans mon application:

com = New SqlCommand("MyQuery", conn) 
com.CommandType = CommandType.StoredProcedure 
prm = New SqlParameter 
With prm 
    .DbType = DbType.Int32 
    .Direction = ParameterDirection.ReturnValue 
End With 
com.Parameters.Add(prm) 
conn.Open() 
Dim rdr As SqlDataReader = com.ExecuteReader 
While rdr.Read 
    Debug.WriteLine(rdr(0)) 
End While 
Debug.Write(prm.Value Is Nothing) 

L'instruction de débogage dans la boucle while imprime toutes les données dans la première colonne, donc je sais qu'il est tout à travailler ensemble, mais le résultat de la débugage final L'affirmation est vraie. Pourquoi ne reçois-je pas ma valeur de retour?

EDIT: La réponse est dans mon code d'application, pas dans le SQL. En quittant le SQL comme il est, je modifié mon code en changeant la deuxième ligne dans la boucle de PRM à:

RetVal = ParameterDirection.ReturnValue 

Maintenant, RetVal contient la valeur de retour. Maintenant, il semble évident que cela a du sens.

+0

Vous avez juste besoin d'un nombre de lignes d'une table? –

+0

Oui, vous n'avez besoin que du nombre de lignes ou des données et du nombre de lignes? – Amir

+0

Si j'ai raison, le "ReturnValue" est pour les procédures stockées. Si vous faites un SELECT normal ... alors les valeurs retournées sont les champs du DataReader. – muffi

Répondre

0

Essayez de modifier votre procédure stockée légèrement:

DECLARE @RetVal int 
SET NOCOUNT ON; 
SELECT * FROM MyTable; 
SET @RetVal = @@ROWCOUNT 
RETURN @RetVal 

Si cela ne fonctionne pas, alors essayez la mise @RetVal en utilisant

SELECT @RetVal = COUNT(*) FROM MyTable 
+0

Je vais marquer cela comme la réponse parce que cela m'a obligé à repenser comment je récupère réellement le nombre de lignes. La réponse est dans mon édition à l'OP. – SezMe

0

Veuillez mettre à jour la requête comme indiqué ci-dessous.

SELECT * FROM MyTable; 
SELECT @@ROWCOUNT as Row_Count 

Après la mise à jour SP obtenir les données DataSet et dans le deuxième tableau de Dataset vous aurez obtenu la valeur du nombre de lignes.

+0

Je n'utilise pas de jeu de données maintenant, je vais d'abord essayer la suggestion de Skippy et voir ce que je peux obtenir. – SezMe