Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir une valeur de retour dans C # asp.net à partir d'une procédure stockée (problème de syntaxe)

Pour capturer une VALEUR RENVOYÉE (renvoyée par SQL à l'aide de la syntaxe RETURN({nombre})), utilisez :

cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

En outre, vous devriez probablement utiliser SCOPE_IDENTITY() au lieu de @@IDENTITY

Modifier :
Ainsi, votre sproc ferait quelque chose comme :

DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)

Et votre code C# pour récupérer cette valeur serait :

int newId = cmdHeader.Parameters[@ReturnValue].value;

Modification 2 :
Ok, la question d'origine a confondu le problème car la "valeur de retour" est différente de ce que vous faites réellement, c'est-à-dire renvoyer un ensemble de résultats à une seule colonne.

Donc, à la place, NE PAS ajouter un paramètre ReturnValue du tout. Utilisez simplement ExecuteScalar() en utilisant votre configuration SqlCommand d'origine comme ci-dessous :

int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());