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!