2012-03-27 3 views
1

J'ai une procédure stockée qui travaille très bien, mais j'ai récemment ajouté trois nouvelles params lui:Paramètre pas passé avec SqlCommand

**@HasObits**, **@AlternateName**, and **@Notes**. 

CREATE PROCEDURE dbo.sp_InsertNewRecord 
(
@CountryID int, 
@StateID int, 
@CountyID int, 
@RecordsOnline bit = 0, 
**@HasObits bit = 0,** 
@Name varchar(100), 
**@AlternateName varchar(100) = null,** 
@Address varchar(50) = null, 
@Address2 varchar(50) = null, 
@City varchar(50) = null, 
@ZipCode varchar(10) = null, 
@Phone char(10) = null, 
@Fax char(10) = null, 
@Email varchar(50) = null, 
@Website varchar(100) = null, 
@SearchURI varchar(150) = null, 
**@Notes text = null,** 
@AddedBy uniqueidentifier = null 
) 

AS 

BEGIN 
    SET NOCOUNT ON 

INSERT INTO MyTable (CountryID, StateID, CountyID, RecordsOnline, HasObituaries, [Name], AlternateName, [Address], Address2, City, ZipCode, Phone, Fax, Email, Website, SearchURI, Notes, AddedBy) 
    VALUES (@CountryID, @StateID, @CountyID, @RecordsOnline, @HasObits, @Name, @AlternateName, @Address, @Address2, @City, @ZipCode, @Phone, @Fax, @Email, @Website, @SearchURI, @Notes, @AddedBy) 

END 
GO 

Ce code est appelé par ma couche d'accès aux données dans ce méthode:

Cette même méthode a travaillé très bien, jusqu'à ce que j'ajouté trois nouveaux params. Maintenant, lorsque cette méthode s'exécute, il continue à me donner l'erreur: "@HasObits n'est pas un paramètre pour la procédure sp_InsertNewRecord" Si je commente cette ligne, il dit la même erreur seulement avec @AlternateName, alors je commente et il dit la même chose à propos de @Notes, donc je commente cela et ensuite il insère l'enregistrement avec succès.

Si je devais deviner, je dirais que le SqlCommand n'enregistre pas le param pour une raison quelconque. Je peux exécuter la commande SQL suivante dans SQL Server 2008 et il fonctionne exactement ce que je pense:

exec sp_InsertNewRecord @CountryID = 1, @StateID = 13, @CountyID = 1, @Name = 'TESTING', @HasObits = 1, @Notes = 'testing notes', @AlternateName = 'alternate name' 

Je suis à une perte à ce stade. Je n'ai jamais eu un problème comme celui-ci et j'ai passé environ 5 heures à essayer de trouver une réponse à cette question, donc toute aide serait grandement appréciée!

Les DataTypes pour les paramètres transmis (company.HasObits est un bool, company.AlternateName est une chaîne et company.Notes est une chaîne).

Merci d'avance pour votre aide! Je suis très très frustré par cela et j'espère que quelqu'un pourra nous éclairer là-dessus.

+5

Avez-vous noté que dans votre code C# vous nommez le paramètre comme 'HasObituaries' plutôt que' HasObits' comme dans la procédure stockée?Aussi, pourriez-vous inclure le texte de la chaîne 'COMPANY_INSERT'? – Rob

+1

Vérifiez que vous exécutez le programme par rapport à la base de données correcte, et non à celle qui contient l'ancienne version de la procédure stockée – GolfWolf

+0

Veuillez écrire le design de votre table.Et essayez de supprimer et de recréer la table. problèmes car il ne le reconnaît parfois pas – Milee

Répondre

0

Ce problème a été vers le bas vers les serveurs de base de données en mouvement société d'hébergement que je testais l'application et il ne fut plus pointant vers la base de données plus correcte.

Tout le code était/est correct (ce qui me fait me sentir mieux), mais il ne faisait que pointer vers le mauvais serveur DB. J'ai reçu un e-mail environ 5 heures plus tard de la part de la société me disant qu'il avait été commuté et que j'avais besoin de mettre à jour toutes les références à l'ancien serveur.

0

Même si vous avez la valeur par défaut pour ces paramètres, vous devez les ajouter à la collection cmd.Parameters. (Vous pouvez affecter DBNull.Value).

0

S'applique sur un nom; utilisez soit HasObits ou HasObituaries. Ensuite, mettez à jour le code, la procédure stockée et les noms de colonne pour tous correspondre.

1

Votre SP a un paramètre = @HasObits mais votre SqlCommand ajoute le paramètre comme HasObituaries.

**cmd.Parameters.AddWithValue("HasObituaries", company.HasObituaries);** 

Cela pourrait être à l'origine de l'un des problèmes.

+0

C'était une erreur de ma part pendant que j'écrivais ma question. J'ai dû changer une partie du code pour cacher quelques détails du projet. Le nom de param correct est HasObituaries et ceci est cohérent dans tout le code et dans le proc stocké, mais je dois l'avoir manqué lors de la publication de ma question. Désolé pour la confusion. – Cory

1

Dans votre code, vous ajoutez

cmd.Parameters.AddWithValue("HasObituaries", company.HasObituaries); 

Mais dans votre magasin votre paramètre est @HasObits.

Changer le code de cette façon:

cmd.Parameters.AddWithValue("HasObits", company.HasObituaries); 
+0

C'était une erreur de ma part pendant que j'écrivais ma question. J'ai dû changer une partie du code pour cacher quelques détails du projet. Le nom de param correct est HasObituaries et ceci est cohérent dans tout le code et dans le proc stocké, mais je dois l'avoir manqué lors de la publication de ma question. Désolé pour la confusion. – Cory

Questions connexes