Lors de l'appel d'une procédure stockée qui renvoie une valeur en C#, il est crucial de gérer correctement la valeur de retour dans le code. Cet article décrit ce problème et propose une solution pour récupérer avec succès les valeurs de retour des procédures stockées.
Une application C# doit appeler une procédure stockée qui renvoie la valeur suivante dans une séquence. Malgré le suivi des solutions en ligne, je ne parviens toujours pas à récupérer la valeur de retour. L'extrait de code fourni inclut la création d'un objet SqlCommand, la spécification de la procédure stockée comme texte de commande et l'utilisation d'un SqlConnection pour exécuter la commande. Cependant, la valeur de retour de la procédure stockée n'est pas récupérée.
<code class="language-sql">ALTER procedure [dbo].[usp_GetNewSeqVal] @SeqName nvarchar(255) as begin declare @NewSeqVal int set NOCOUNT ON update AllSequences set @NewSeqVal = CurrVal = CurrVal+Incr where SeqName = @SeqName if @@rowcount = 0 begin print 'Sequence does not exist' return end return @NewSeqVal end</code>
<code class="language-csharp">SqlConnection conn = new SqlConnection(getConnectionString()); conn.Open(); SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param = new SqlParameter(); param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar); param.Direction = ParameterDirection.Input; param.Value = "SeqName"; SqlDataReader reader = cmd.ExecuteReader();</code>
Pour obtenir la valeur de retour de la procédure stockée, vous devez ajouter un paramètre avec la direction ReturnValue à l'objet SqlCommand. Cela demande à la commande de déclarer une variable et de lui attribuer la valeur de retour de la procédure stockée. Le code suivant illustre la solution :
<code class="language-csharp">using (SqlConnection conn = new SqlConnection(getConnectionString())) using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = parameterStatement.getQuery(); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("SeqName", "SeqNameValue"); // @ReturnVal 可以是任何名称 var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; conn.Open(); cmd.ExecuteNonQuery(); var result = returnParameter.Value; }</code>
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!