Dans SQL Server, je peux passer une valeur IN à un paramètre de sortie de procédure stockée, le modifier, puis le relire:Ecrire au paramètre de sortie avec C#
CREATE PROCEDURE [dbo].[testSP]
@myOutputParam INT OUTPUT
AS
BEGIN
SELECT @myOutputParam = @myOutputParam + 1
END
GO
DECLARE @x int = 1
EXEC testSP @myOutputParam = @x OUTPUT
PRINT @x -- prints: 2
Cependant, quand je tente faire à partir de C#, il ne fonctionne pas:
using (SqlConnection db = new SqlConnection("..."))
using (SqlCommand cmd = new SqlCommand("testSP", db))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@myOutputParam", SqlDbType.Int).Value = (int)1;
cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.Output;
db.Open();
int rowsAffected = cmd.ExecuteNonQuery();
int x = (int)cmd.Parameters["@myOutputParam"].Value;
}
L'affectation int x
finale renvoie une erreur
La distribution spécifiée n'est pas valide
Où est-ce que je vais mal?
ce qui est le résultat de 'cmd.Parameters [ "@ myOutputParam"] value' sans coulée.? – SeM
@SeM Je pense que c'est un objet vide. Ce n'est pas "null" parce que la distribution échoue encore même si j'utilise 'int? x = (int?) cmd.Parameters ["@ myOutputParam"]. Valeur; ' – mulllhausen