Aide de base des procédures stockées Récupération des totaux dans la table

C'est ma procédure stockée, la requête renvoie une table avec trois colonnes avec un montant total dans chaque colonne.

Prix ​​Unitaire, Taxe, OrdreTotal

ALTER PROCEDURE [dbo].[sp_TaxOrderReport] -- Add the parameters for the stored procedure here @StartDate date, @EndDate date, @TaxReturnValue int, @TotalReturnValue int, @UnitReturnValue int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT Sum(oi.UnitPrice) as UnitPrice, Sum(oi.Tax) as Tax, Sum(oi.TotalAmount) as OrderTotal FROM OrderItems oi, Orders o where @StartDate <= o.OrderDate and O.OrderDate <= @EndDate and o.OrderId = oi.OrderId select @TaxReturnValue as Tax select @UnitReturnValue as UnitPrice select @TotalReturnValue as OrderTotal -- How can I return several values over?? return @TaxReturnValue END 

Mon but est d'avoir des dates de saisie d'admin et de recevoir un rapport de la taxe de vente totale et de l'argent avant impôt généré pour lui. C'est à quoi ressemble ma méthode dans mon controller.

 public ActionResult GetTaxReport(ssortingng StartDate, ssortingng EndDate) { ssortingng connectionSsortingng = ConfigurationManager.ConnectionSsortingngs["DefaultConnection"].ConnectionSsortingng; using (var connection = new SqlConnection(connectionSsortingng)) { connection.Open(); using (SqlCommand cmd = new SqlCommand("sp_TaxOrderReport", connection)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = StartDate; cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = EndDate; cmd.Parameters.Add("@TaxReturnValue", SqlDbType.Int).Value = 0; cmd.Parameters.Add("@UnitReturnValue", SqlDbType.Int).Value = 0; cmd.Parameters.Add("@TotalReturnValue", SqlDbType.Int).Value = 0; cmd.ExecuteNonQuery(); var returnvalue = cmd.Parameters["@TaxReturnValue"].Value.ToSsortingng(); } connection.Close(); } return View("FindUser"); } 

Le @TaxReturnValue n'est pas défini à la valeur de la colonne, je ne peux pas sembler find un moyen de définir ces trois variables, puis les returnner tous afin que je puisse les rendre à mon avis. Si quelqu'un a des conseils, je l'apprécierais.

 -----UPDATE-------------- 

Je pensais que je mettrais à jour la question pour contenir la réponse au cas où quelqu'un aurait besoin d'une réponse très explicite sur la façon de returnner et de définir les variables passées à une procédure stockée.

Procédure stockée:

 ALTER PROCEDURE [dbo].[sp_TaxOrderReport] -- Add the parameters for the stored procedure here @StartDate date, @EndDate date, @TaxReturnValue int OUTPUT, @TotalRevenue int OUTPUT, @UnitReturnValue int OUTPUT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from --Insert statements for procedure here SELECT @TaxReturnValue = Sum(oi.Tax), @UnitReturnValue = Sum(oi.UnitPrice), @TotalRevenue = Sum(oi.TotalAmount) FROM OrderItems oi, Orders o where @StartDate <= o.OrderDate and O.OrderDate <= @EndDate and o.OrderId = oi.OrderId END 

Code C #:

  ssortingng connectionSsortingng = ConfigurationManager.ConnectionSsortingngs["DefaultConnection"].ConnectionSsortingng; using (var connection = new SqlConnection(connectionSsortingng)) { connection.Open(); using (SqlCommand cmd = new SqlCommand("sp_TaxOrderReport", connection)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = StartDate; cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = EndDate; cmd.Parameters.Add("@TaxReturnValue", SqlDbType.Int).Value = 0; cmd.Parameters.Add("@UnitReturnValue", SqlDbType.Int).Value = 0; cmd.Parameters.Add("@TotalRevenue", SqlDbType.Int).Value = 0; cmd.Parameters["@TaxReturnValue"].Direction = ParameterDirection.Output; cmd.Parameters["@TotalRevenue"].Direction = ParameterDirection.Output; cmd.Parameters["@UnitReturnValue"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); var taxTotal = cmd.Parameters["@TaxReturnValue"].Value; var unitPriceTotal = cmd.Parameters["@UnitReturnValue"].Value; var totalRenuve = cmd.Parameters["@TotalRevenue"].Value; } connection.Close(); } 

Merci les gars pour votre aide!

Pour commencer, vous devez définir ParameterDirection sinon @TaxReturnValue ne sera pas renvoyé:

 cmd.Parameters.Add("@TotalReturnValue", SqlDbType.Int).Value = 0; cmd.Parameters["@TaxReturnValue"].Direction = ParameterDirection.ReturnValue; 

Cependant, cela ne renverrait toujours pas votre valeur car vous ne les remplissez pas correctement. Vous devriez le faire à la place:

 SELECT @TaxReturnValue = Sum(oi.UnitPrice) as UnitPrice, @UnitReturnValue=Sum(oi.Tax), TotalReturnValue =Sum(oi.TotalAmount) as OrderTotal FROM OrderItems oi, Orders o where @StartDate <= o.OrderDate and O.OrderDate <= @EndDate and o.OrderId = oi.OrderId --select @TaxReturnValue as Tax --select @UnitReturnValue as UnitPrice --select @TotalReturnValue as OrderTotal 

Vous devez ensuite spécifier ces variables en tant que parameters OUTPUT :

 ALTER PROCEDURE [dbo].[sp_TaxOrderReport] -- Add the parameters for the stored procedure here @StartDate date, @EndDate date, @TaxReturnValue int OUTPUT, @TotalReturnValue int OUTPUT, @UnitReturnValue int OUTPUT AS 

Vous avez besoin de quelque chose de similaire en C #:

 cmd.Parameters["@TaxReturnValue"].Direction = ParameterDirection.Output; cmd.Parameters["@TotalReturnValue "].Direction = ParameterDirection.Output; cmd.Parameters["@UnitReturnValue "].Direction = ParameterDirection.Output; 

Vous pouvez également renvoyer un jeu de résultats à l'aide de l'instruction select (sans utiliser de variables), voir la documentation pour plus de détails.

Vous devez spécifier la variable de sortie sur le paramètre que vous voulez returnner dans la procédure

 ... @EndDate date, @TaxReturnValue int output, @TotalReturnValue int, ... 

Vous pouvez également consulter cet article