2016-02-29 28 views
1

這是我的存儲過程,該查詢返回三列一個表,每列內的總量。存儲過程Basic幫助獲得總計返回從表

單價,稅務的OrderTotal

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 

我的目標是有一個管理員輸入的日期,對他產生的稅前得到回來報告總營業稅和金錢。這是我的方法在我的控制器中的樣子。

public ActionResult GetTaxReport(string StartDate, string EndDate) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 

    using (var connection = new SqlConnection(connectionString)) 
    { 
     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.ToString(); 
     } 
     connection.Close(); 
    } 
    return View("FindUser"); 
} 

的@TaxReturnValue不獲取設置爲從列中的值,我似乎無法找到設置,這三個這些變量,然後返回他們所有,所以我可以在我看來,使它們的方式。如果有人有任何提示,我將不勝感激。

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

以爲我會更新包含以防萬一有人需要關於如何返回,並設置在傳遞給存儲過程變量的一個非常明確的答案回答問題。

存儲過程:

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 

C#代碼:

 string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 

     using (var connection = new SqlConnection(connectionString)) 
     { 
      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(); 
     } 

感謝所有幫助傢伙!

回答

2

首先,你需要設置ParameterDirection否則@TaxReturnValue不得到退回:

cmd.Parameters.Add("@TotalReturnValue", SqlDbType.Int).Value = 0; 

cmd.Parameters["@TaxReturnValue"].Direction = ParameterDirection.ReturnValue; 

但是,由於您沒有正確填充,這仍然不會返回您的價值他們。你應該這樣做,而不是:

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 

你應該再指定這些變量作爲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 

您需要在C#中類似的東西:

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

或者,你可以返回使用SELECT語句(不使用變量)的結果集,看到documentation瞭解更多詳情。

+0

嘿朋友我嘗試添加這不過它仍然返回0是否有我可以控制整個3列的表格作爲一個對象,並從那裏得到的值的方法嗎?存儲過程中的變量未被設置。 – Lostaunaum

+0

更新答案正確返回變量 – Jaco

+0

感謝的人更新爲包含糾正編輯的代碼的問題。非常感謝答覆。 – Lostaunaum

0

你應該要在程序返回的參數指定輸出變量

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

您可以檢查此post