Commande.ExecuteScalar retourne toujours null lors de la Procédure Stockée dans Management Studio fonctionne très bien
J'ai le SQL suivant une procédure stockée avec un paramètre d'entrée et un paramètre de sortie.
CREATE PROCEDURE [dbo].[spCanUserEdit]
(
@username nvarchar(255)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CanEdit bit
SELECT
@CanEdit = CanUserEdit
FROM tblUsers
WHERE username = LOWER(@username)
RETURN SELECT @CanEdit
END
GO
Dans la procédure stockée ci-dessus CanUserEdit
colonne dans tblUsers
est de type bit de la colonne et avec une valeur par défaut à 0. Maintenant, quand j'exécute cette procédure dans Management Studio, il fonctionne bien, mais lorsque j'utilise command.ExecuteScalar()
dans mon code C#, il renvoie toujours null
. Quelqu'un pourrait-il me dire ce que je fais de mal ici.
Qui suit est ma méthode C#
public static bool CanUserEdit(string userName)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[Constants.ConnectionStringName].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spCanUserEdit";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@username", userName));
conn.Open();
bool canEdit = (bool)cmd.ExecuteScalar();
return canEdit;
}
}
}
Salutations
OriginalL'auteur Learning Curve | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Le problème est dans la façon dont vous renvoyer des données. Si vous souhaitez utiliser ExecuteScalar, vous ne devriez pas REVENIR, mais au lieu de cela, SÉLECTIONNEZ simplement.
Essayer de changer le SP comme suit:
Si vous ne pouvez pas modifier la SP, mais le code, la solution est de lire le paramètre '@ReturnValue' avec ExecuteNonQuery.
Un plaisir de vous aider 🙂 j'ai édité ma réponse à inclure une correction possible dans le code à la place de la SP.
OriginalL'auteur Dan