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: p> La ligne suivante dans mon code doit être le " paramètredirection.ReturnValue em>" Mais je ne peux pas sembler obtenir la syntaxe correcte. P> Des idées? P> P> P>
4 Réponses :
La direction est définie sur un objet sqlparameter code>, pour votre exemple, cela devrait être quelque chose comme:
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 code> SQLCOMMAND code> à côté des autres paramètres.
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;
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'
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());
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?
Procédure stockée SQL: P>
Supposons la procédure renvoie une pièce d'identité / identité comme indiqué ci-dessous p>
en C #, nous pouvons p>
set @ retourvalue = Scope_Identity () code>
retour @returnValue code> p>
sqlparameter [] param = null; code>
param = nouveau sqlparameter [] { code>
nouveau sqlparameter ("@ idstudent", idstudent), code>
Nouveau SQLParameter ("", "") // Quelques paramètres vides pour la valeur de retour code>
} code> p>
// ici, nous pouvons mettre à jour le param avec le type de retour code>
SQLParameter Parout = Nouveau SQLParameter ("@ retourvalue", 0); code>
parout.direction = paramètredirection.output; code>
param [param.length - 1] = parout; code> p>
DataSet DSRESULT = CON.EXECUTELECTTREDPROC ("SP_NAME", param); code> p>
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