Valeur de return incorrecte lors de l'utilisation de ExecuteNonQuery ()

J'ai un programme C # que j'écris qui interagit avec SQL Server. J'avais bêtement encodé les strings de requête dans le programme C #, et je voulais plutôt les transformer en procédures stockées sur le server.

Pour une raison quelconque, une instruction INSERT particulière (qui fonctionnait bien!) Ne fonctionne plus et je n'arrive pas à comprendre pourquoi. J'ai même exécuté un SQL Profiler Trace, et cela montre que la déclaration est parfaitement formée! Peut-être que quelqu'un peut me dire ce que je fais mal.

PROCÉDURE STOCKÉE: Ce SP prend juste un tas de parameters et les insère dans une table. Très simple.

ALTER PROCEDURE [dbo].[usp_InsertNewChangeRequest] @Requester INT, @ChangeCreationDate DATETIME, @ChangeName VARCHAR(200), @ChangeDescription VARCHAR(1000), @LastModifiedDate DATETIME, @LastModifiedBy INT, @AffectedArea INT, @ImplementationPlan VARCHAR(MAX), @BackoutPlan VARCHAR(MAX), @RiskLevel TINYINT, @ApprovalRequired BIT, @IsApproved BIT AS BEGIN SET NOCOUNT ON; INSERT INTO dbo.ChangeRequests(Requester, ChangeCreationDate, ChangeName, ChangeDescription, LastModifiedDate, LastModifiedBy, AffectedArea, ImplementationPlan, BackoutPlan, RiskLevel, ApprovalRequired, IsApproved) VALUES (@Requester, @ChangeCreationDate, @ChangeName, @ChangeDescription, @LastModifiedDate, @LastModifiedBy, @AffectedArea, @ImplementationPlan, @BackoutPlan, @RiskLevel, @ApprovalRequired, @IsApproved) END 

Mon code en C # prépare simplement les parameters SP puis appelle une nonquery:

 public int InsertNewChange(int RequesterID, DateTime CreationDate, ssortingng ChangeName, ssortingng ChangeDescription, DateTime LastModifiedDate, int AffectedAreaID, ssortingng ImplementationPlan, ssortingng BackoutPlan, int RiskLevel, int ApprovalRequired, int IsApproved) { int retval = 0; // Create a command whose name is the stored procedure for inserts SqlCommand command = new SqlCommand("usp_InsertNewChangeRequest", scConnection); command.CommandType = CommandType.StoredProcedure; // add the parameters to the stored procedure command.Parameters.Add(new SqlParameter("@Requester", RequesterID)); command.Parameters.Add(new SqlParameter("@ChangeCreationDate", CreationDate)); command.Parameters.Add(new SqlParameter("@ChangeName", ChangeName)); command.Parameters.Add(new SqlParameter("@ChangeDescription", ChangeDescription)); command.Parameters.Add(new SqlParameter("@LastModifiedDate", LastModifiedDate)); command.Parameters.Add(new SqlParameter("@LastModifiedBy", RequesterID)); command.Parameters.Add(new SqlParameter("@AffectedArea", AffectedAreaID)); command.Parameters.Add(new SqlParameter("@ImplementationPlan", ImplementationPlan)); command.Parameters.Add(new SqlParameter("@BackoutPlan", BackoutPlan)); command.Parameters.Add(new SqlParameter("@RiskLevel", RiskLevel)); command.Parameters.Add(new SqlParameter("@ApprovalRequired", ApprovalRequired)); command.Parameters.Add(new SqlParameter("@IsApproved", IsApproved)); retval = command.ExecuteNonQuery(); return retval; } 

Je reçois constamment une valeur de return -1, alors qu'avant, lorsque le text SQL était entièrement écrit en C #, j'obtenais un 1, pour la ligne insérée.

Je ne vois pas d'erreur dans SQL Profiler lorsque je fais une trace. Il montre la déclaration passée, et il semble tout à fait bien! Lorsque je le coupe et que je le colle dans Management Studio et que je le lance à la main, tout fonctionne correctement.

  exec usp_InsertNewChangeRequest @Requester=4,@ChangeCreationDate='2012-05-16 17:55:45',@ChangeName='test name',@ChangeDescription='test description',@LastModifiedDate='2012-05-16 17:56:01.937',@LastModifiedBy=4,@AffectedArea=2,@ImplementationPlan='test implem',@BackoutPlan='test backout',@RiskLevel=1,@ApprovalRequired=0,@IsApproved=0 

Est-ce que quelqu'un sait pourquoi cela m'arriverait? MERCI BEAUCOUP!

Parce que vous l'avez éteint:

 SET NOCOUNT ON; 

Avez-vous essayé d'utiliser @@RowCount; au lieu de countr sur le nombre de lignes renvoyé si c'est un INSERT, UPDATE, or DELETE .

Il semble que beaucoup de suggestions autour de SP utilisent @@RowCount et SET NOCOUNT ON;