8
votes

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

J'ai des problèmes d'essayer d'obtenir la syntaxe correcte pour mon code ASP.NET C # 2008. J'ai besoin d'obtenir une valeur de retour (sélectionnez @@ identité) à partir de ma procédure stockée

mon code C # est: xxx

La ligne suivante dans mon code doit être le " paramètredirection.ReturnValue " Mais je ne peux pas sembler obtenir la syntaxe correcte.

Des idées?


4 commentaires

Vous dites "Valeur de retour" qui implique: Retour (@Newid) Syntaxe, mais vous dites "SELECT @@ ITORY" qui retournera un résultatant, pas une valeur de retour. Ma réponse suppose que vous utilisez la syntaxe de retour. Pourriez-vous clarifier?


Le code dans le procédé stocké est sélectionné @@ identité Malheureusement, le ProC stocké ne peut pas être modifié.


Pitié Proc ne peut pas être modifié. Énoncé que j'aimerais juste mentionner que cette étendue doit être utilisée de préférence à @@ identité. Je sais que ce n'est pas applicable dans ce cas, il suffit de répandre des graines pour d'autres personnes qui peuvent ne pas savoir msdn.microsoft.com/en-us/library/aa259185 (SQL.80) .aspx


@ user279521 - OK, a du sens maintenant. Il a été confus par le fait que vous parliez de paramètredirection.Returnvalue qui n'est pas vraiment ce que vous voulez


4 Réponses :


0
votes

La direction est définie sur un objet sqlparameter , pour votre exemple, cela devrait être quelque chose comme: xxx


2 commentaires

Pour une valeur de retour, dois-je faire un cmdheader.parameterers.Ajouter (nouveau sqlparameter ("@ postal_code", sqldbtype.varchar, 12)); également?


Oui, le paramètre de retour doit être ajouté à la collection de paramètres SQLCOMMAND à côté des autres paramètres.



4
votes
SqlParameter parameterReturnValue = new SqlParameter("ReturnValue", SqlDbType.Int, 4);
parameterReturnValue.Direction = ParameterDirection.ReturnValue;
cmdHeader.Parameters.Add(parameterReturnValue);

//Execute your command
cmdHeader.ExecuteNonQuery();

//Get the return value
int returnvalue = (int)myCommand.Parameters["ReturnValue"].Value;

1 commentaires

Vous devez attribuer votre retourValue dans votre procédure stockée. Cela pourrait être @returnValue ou que vous choisissez. Vous pouvez utiliser cette affirmation (dans mon cas RetourValue): Set RetourValue = 'Votre résultat'



18
votes

Pour capturer une valeur de retour (renvoyée par SQL à l'aide de la syntaxe de retour ({Number})) Utilisez:

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


5 commentaires

Comment attribuer la valeur de retour à une variable?


NON!. Mon code PROC est "SELECT @@ ITORY" Ce processus ne peut pas être modifié.


@ user279521 - Ah c'est clair maintenant! Ajouté "EDIT 2" à ma réponse!


Merci adathedev. J'étais sous l'impression que seul "paramètredirection.returnvalue" était capable d'obtenir la valeur. J'ai totalement oublié Abot Executescalar. Merci encore!


Je suis dans la position étrange d'être incapable de changer la procédure stockée (site 3ème partie) ou avoir accès à «ExecutesCalar» (il doit être appelé via Webservice avec seulement certaines méthodes accessibles). Y a-t-il quelque chose que je puisse obtenir la valeur de retour d'une exercutesdedprocedure?



0
votes

Procédure stockée SQL:

Supposons la procédure renvoie une pièce d'identité / identité comme indiqué ci-dessous

set @ retourvalue = Scope_Identity () retour @returnValue

en C #, nous pouvons

sqlparameter [] param = null; param = nouveau sqlparameter [] { nouveau sqlparameter ("@ idstudent", idstudent), Nouveau SQLParameter ("", "") // Quelques paramètres vides pour la valeur de retour }

// ici, nous pouvons mettre à jour le param avec le type de retour SQLParameter Parout = Nouveau SQLParameter ("@ retourvalue", 0); parout.direction = paramètredirection.output; param [param.length - 1] = parout;

DataSet DSRESULT = CON.EXECUTELECTTREDPROC ("SP_NAME", param);


0 commentaires