Procédure stockée ou une fonction s'attend à ce paramètre qui n'est pas fourni

Je suis en train d'essayer d'insérer des données dans une base de données SQL Server par l'appel d'une procédure stockée, mais j'obtiens l'erreur

Procédure ou la fonction 'SHOWuser' attend le paramètre '@userID", qui n'a pas été fourni.

Ma procédure stockée est appelée SHOWuser. J'ai vérifié à fond et pas de paramètres est manquant.

Mon code est:

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
        SqlConnection dbcon = new SqlConnection(conn);

        try
        { 
            SqlCommand cmd = new SqlCommand();

            cmd.Connection = dbcon;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "SHOWuser";

            cmd.Parameters.AddWithValue("@userName", userName);
            cmd.Parameters.AddWithValue("@password", password);
            cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

            dbcon.Open();

            int i = Convert.ToInt32(cmd.ExecuteScalar());

            cmd.Parameters.Clear();
            cmd.CommandText = "tbl_pref";

            foreach (int preference in preferences)
            {
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
                cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            dbcon.Close();
        }

et de la procédure stockée est:

ALTER PROCEDURE [dbo].[SHOWuser]
(
    @userName varchar(50),
    @password nvarchar(50),
    @emailAddress nvarchar(50)
)
AS
BEGIN
    INSERT INTO tbl_user(userName, password, emailAddress) 
    VALUES (@userName, @password, @emailAddress)

    SELECT
        tbl_user.userID, tbl_user.userName,
        tbl_user.password, tbl_user.emailAddress, 
        STUFF((SELECT ',' + preferenceName 
               FROM tbl_pref_master
               INNER JOIN tbl_preferences ON tbl_pref_master.preferenceID = tbl_preferences.preferenceID
               WHERE tbl_preferences.userID = tbl_user.userID
               FOR XML PATH ('')), 1, 1, ' ' ) AS Preferences
    FROM
        tbl_user

    SELECT SCOPE_IDENTITY();
END

C'est la deuxième procédure stockée tbl_pref qui est utilisé dans la même fonction:

ALTER PROCEDURE [dbo].[tbl_pref]
    @userID int,
    @preferenceID int
AS
BEGIN
    INSERT INTO tbl_preferences(userID, preferenceID) 
    VALUES (@userID, @preferenceID)
END
  • L'erreur est assez évident. La procédure stockée attend un paramètre appelé UserID. Votre code appelant ne fournit pas de paramètre, appelé nom d'utilisateur.
  • Le preferenceName voici une liste de case à cocher dans lequel j'ai déjà entre les valeurs de la base de données. Svp aider.
  • Mais le nom d'utilisateur est générée automatiquement la colonne.
  • Vous ne semblez pas passer le paramètre de nom d'utilisateur dans votre code. C'est une colonne d'identité?
  • Il est toujours prévu dans la procédure de définition, et qui manque dans le code. C'est pourquoi vous voyez le message d'erreur.
  • > la Procédure ou la fonction 'SHOWuser' attend le paramètre '@preferenceName", qui n'a pas été fourni.
  • il y a 5 paramètres dans votre SP, mais votre code n'a que 4. C'est pourquoi l'erreur.
  • u pourrait pls me dire le bon codage en flétrir la procédure stockée ou C# pour les deux userID et preferenceName
  • Dans ce cas, passer de 0 à la UserID si c'est une colonne d'identité.
  • ya c'est vrai, mais le nom d'utilisateur est générée automatiquement la colonne et preferenceName est une liste de valeurs déjà saisies dans la base de données. J'utilise ici les trucs de requête pour la combinaison de deux tables tbl_user(nom d'utilisateur,mot de passe,votre adresse de courrier électronique)==[Ces valeurs saisies par l'utilisateur] et tbl_pref_master(prefID,preferenceName)==[j'ai déjà saisi ces valeurs dans la base de données].
  • Votre tête a dit que vous avez essayé d'insérer des données dans une base de données SQL Server, mais la procédure stockée que vous avez donné n'est ici qu'une instruction select. Est-ce ton code complet?
  • Thanku pour réaliser mon erreur. Pls voir le code que j'ai modifié la procédure stockée. mais toujours l'erreur reste la même
  • pls m'aider avec le code pour passer de 0 à l'identifiant utilisateur. Comme est-il en passant la valeur null dans cette voie. "ENSEMBLE userid=null;" La procédure stockée est en fait de ne pas accepter ceci. Aider Pls
  • J'ai modifie le code de la procédure stockée. Maintenant l'erreur est généré d'ERREUR: objet de référence non définie à une instance d'un objet.
  • double possible de Procédure s'attend à ce paramètre qui n'a pas été fourni

InformationsquelleAutor user2920046 | 2013-10-31