C# SQL注入cshtml

C# SQL注入cshtml,c#,sql,razor,code-injection,C#,Sql,Razor,Code Injection,因此,我在这里问了一些问题,并因为使用SQL注入易受攻击的代码而受到批评,尽管该网站不会在线,但我被建议无论如何都要修复它,我现在正在尝试这样做 所以我用下面的代码做了一个测试页面来测试它 var date = "2017-01-26"; var testQuery = "SELECT * FROM Test WHERE date = @0"; db.Execute(testQuery, date); 到目前为止,只运行这个页面不会给我带来任何错误,但是大约99%的时间我从数据库中选择一些东

因此,我在这里问了一些问题,并因为使用SQL注入易受攻击的代码而受到批评,尽管该网站不会在线,但我被建议无论如何都要修复它,我现在正在尝试这样做

所以我用下面的代码做了一个测试页面来测试它

var date = "2017-01-26";

var testQuery = "SELECT * FROM Test WHERE date = @0";
db.Execute(testQuery, date);
到目前为止,只运行这个页面不会给我带来任何错误,但是大约99%的时间我从数据库中选择一些东西,我使用
foreach
来显示我的数据

foreach (var c in db.Query(testQuery))
{
    <a>@c.kg</a>
}
foreach(db.Query中的var c(testQuery))
{
@c、 千克
}
添加这样的foreach会给我一个错误:

缺少一个参数。[参数序号=1]

我做错了什么?这甚至是SQL注入安全吗?
注:这不是MVC类型的项目。

如果数据库是EF上下文,默认参数名称是
p0
,ie查询应该是

var testQuery = "SELECT * FROM Test WHERE date = @p0";
foreach (var c in db.Query(testQuery, date)) ...
或者提供
SqlParameter
作为第二个参数,而不是普通值

db.Query("... = @p", new SqlParameter('p', date))

您需要向查询中添加参数值这是逻辑。我建议您将其放置在
控制器中,并将其作为模型发送到视图中。但这与你的问题无关。这只是一个旁注。@IkramTurgunbaev-显然是
db.Execute
do It
db
的类型是什么?此外,您可以清楚地看到它们之间的区别:在第一个选项中,您为
Execute()
提供了
date
,在第二个选项中,您没有。