如何将参数传递给 FromSqlRaw?
Posted
技术标签:
【中文标题】如何将参数传递给 FromSqlRaw?【英文标题】:How to pass parameters to FromSqlRaw? 【发布时间】:2022-01-06 16:53:47 【问题描述】:using(DAD_BaldipContext ctx = new DAD_BaldipContext())
int month = 02;
int year = 2018;
var x = ctx.TruckRentalPb.FromSqlRaw("TotalMonthlyRental @month, @year", month, year).ToList();
textbox.Text = x[1].TruckId.ToString();
存储过程:
ALTER PROCEDURE [dbo].[TotalMonthlyRental]
@month int,
@year int
AS
BEGIN
SET NOCOUNT ON;
SELECT MONTH(RentDate) AS Month, SUM(TotalPrice) AS TotalRental
FROM [TruckRental-PB]
WHERE MONTH(RentDate) = @month
AND YEAR(RentDate) = @year
GROUP BY MONTH([RentDate]), YEAR(RentDate)
END
我正在尝试调用这个名为TotalMonthlyRental
的存储过程,它需要两个参数月份和年份。
我已经硬编码了月份和年份,但是我收到错误必须声明标量变量月份。
【问题讨论】:
【参考方案1】:在 FromSqlRaw 中,您可以构造 DbParameter 对象,
int month = 02;
int year = 2018;
var pMonth = new SqlParameter("@month", System.Data.SqlDbType.Int);
var pYear = new SqlParameter("@year", System.Data.SqlDbType.Int);
pMonth.Value = month;
pYear.Value = year;
var x = ctx.TruckRentalPb.FromSqlRaw("exec TotalMonthlyRental @month, @year;", pMonth, pYear).ToList();
或使用格式样式的字符串。
int month = 02;
int year = 2018;
var x = ctx.TruckRentalPb.FromSqlRaw("exec TotalMonthlyRental 0, 1;", month, year).ToList();
请注意,在传递格式字符串和其他参数时没有歧义,因此 EF 知道参数化查询。
如果您的查询是插值字符串,您也可以使用 FromSqlInterpolated 为您处理参数化:
int month = 02;
int year = 2018;
var x = ctx.TruckRentalPb.FromSqlInterpolated($"exec TotalMonthlyRental month, year;").ToList();
如果您将该插值字符串传递给 FromSqlRaw,则字符串插值将在传入查询之前发生,并且不会被参数化。
【讨论】:
以上是关于如何将参数传递给 FromSqlRaw?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI 将参数传递给 Button 的操作