我正在开发一个 ASP.NET MVC 项目;我的目标是从表格中准备一份报告,所以,我第一次编写 Linq 代码,但速度太慢了。
之后我编写了一个 SQL 查询,它非常快,我想使用存储过程从我的表中获取报告数据。事实上,我的项目非常简单:它获取两个日期 - 开始日期和结束日期 - 并将结果显示在表格中。
我想编写存储过程以从 C# 代码获取两个参数 - 开始日期和结束日期,然后在 C# 变量中返回输出。
第一个问题:如何将我的 SQL 查询转换为具有两个参数(开始日期和结束日期)的存储过程?
第二个问题:C#中如何返回输出结果?
SELECT
CAST(date_rec_slash AS DATETIME), COUNT(code_marz) AS total,
CASE
WHEN code_marz = 1 THEN 'a'
WHEN code_marz = 2 THEN 'b'
WHEN code_marz = 3 THEN 'c'
WHEN code_marz = 4 THEN 'd'
WHEN code_marz = 5 THEN 'e'
END
FROM
dbo.tbl_bar
WHERE
CAST(date_rec_slash AS DATETIME) BETWEEN '2017/12/01' AND '2017/12/31'
GROUP BY
CAST(date_rec_slash AS DATETIME), code_marz
ORDER BY
CAST(date_rec_slash AS DATETIME) ASC;
C#:
var spResults = db.Database.SqlQuery<tbl_bar>("Report");
使用以下语法声明您的存储过程:
USE yourDataBaseNAme
GO
CREATE PROCEDURE [dbo].yourStoreProcedureName
@startDate nvarchar(30),
@endDate nvarchar(30)
AS
SELECT Cast(date_rec_slash as datetime) AS 'date_rec_slash', count(code_marz) as total,
CASE
WHEN code_marz = 1 THEN 'a'
WHEN code_marz = 2 THEN 'b'
WHEN code_marz = 3 THEN 'c'
WHEN code_marz = 4 THEN 'd'
WHEN code_marz = 5 THEN 'e'
END AS 'code_marz'
FROM dbo.tbl_bar
WHERE Cast(date_rec_slash as datetime) between @startDate
AND @endDate
GROUP BY Cast(date_rec_slash as datetime), code_marz
ORDER BY Cast(date_rec_slash as datetime) ASC;
GO
在 EF 中调用此存储过程:
db.Database.SqlQuery<yourObjectNameToCAST>("yourStoreProcedureName");
在 EF 中调用带参数的存储过程:
SqlParameter startDate= new SqlParameter("@startDate", "Value");
SqlParameter endDate= new SqlParameter("@endDate", "Value");
db.Database.SqlQuery<yourObjectNameToCAST>("exec yourStoreProcedureName @startDate, @endDate", startDate, endDate).ToList();
您的投射对象:
public class yourObjectNameToCAST
{
public datetime date_rec_slash { get; set; }
public int total { get; set; }
public string code_marz { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)