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
Libérer: 2025-01-05 20:19:45
original
181 Les gens l'ont consulté

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
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal