Maison >base de données >tutoriel mysql >Comment récupérer correctement les valeurs de retour des procédures stockées en C# ?

Comment récupérer correctement les valeurs de retour des procédures stockées en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 20:19:45205parcourir

How to Properly Retrieve Stored Procedure Return Values in C#?

Récupération des valeurs de retour d'une procédure stockée en C#

Considérez la procédure stockée suivante :

ALTER PROCEDURE [dbo].[Validate]
@a varchar(50),
@b varchar(50) output
AS
SET @Password = 
(SELECT Password
FROM dbo.tblUser
WHERE Login = @a)
RETURN @b
GO

Cette procédure se compile avec succès . Pour exécuter cette requête et obtenir la valeur de retour, vous pouvez écrire un code similaire à celui-ci :

using System.Data.SqlClient;
using System.Configuration;

...

SqlConnection SqlConn = new SqlConnection(
    ConfigurationManager.ConnectionStrings["MyLocalSQLServer"].ConnectionString.ToString());
System.Data.SqlClient.SqlCommand sqlcomm = new System.Data.SqlClient.SqlCommand("Validate", SqlConn);

string returnValue = string.Empty;
SqlConn.Open();

sqlcomm.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@a", SqlDbType.VarChar);
param.Direction = ParameterDirection.Input;
param.Value = Username;
sqlcomm.Parameters.Add(param);

SqlParameter retval = sqlcomm.Parameters.Add("@b", SqlDbType.VarChar);
retval.Direction = ParameterDirection.ReturnValue;

sqlcomm.ExecuteNonQuery(); // MISSING
string retunvalue = (string)sqlcomm.Parameters["@b"].Value;

Notez que la gestion des exceptions a été omise par souci de concision. Lors de l'exécution de la dernière ligne du code, « null » est renvoyé. Pour résoudre ce problème, vous avez oublié d'exécuter la requête. Ajoutez sqlcomm.ExecuteNonQuery(); avant de récupérer la valeur de retour, comme indiqué ci-dessous :

using System.Data.SqlClient;
using System.Configuration;

...

SqlConnection SqlConn = new SqlConnection(
    ConfigurationManager.ConnectionStrings["MyLocalSQLServer"].ConnectionString.ToString());
System.Data.SqlClient.SqlCommand sqlcomm = new System.Data.SqlClient.SqlCommand("Validate", SqlConn);

string returnValue = string.Empty;
SqlConn.Open();

sqlcomm.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@a", SqlDbType.VarChar);
param.Direction = ParameterDirection.Input;
param.Value = Username;
sqlcomm.Parameters.Add(param);

SqlParameter retval = sqlcomm.Parameters.Add("@b", SqlDbType.VarChar);
retval.Direction = ParameterDirection.ReturnValue;

sqlcomm.ExecuteNonQuery();  // Include this line to execute the query

string retunvalue = (string)sqlcomm.Parameters["@b"].Value;

En incorporant cette modification, vous devriez pouvoir récupérer avec succès la valeur de retour de la procédure stockée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn