【发布时间】:2016-02-29 23:01:34
【问题描述】:
这是我的存储过程,查询返回一个包含三列的表,每列的总金额。
单价、税金、订单总额
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();
}
感谢大家的帮助!
【问题讨论】:
标签: c# mysql sql-server