asp.net mvc 5 SQL查询中的命名参数

Posted

技术标签:

【中文标题】asp.net mvc 5 SQL查询中的命名参数【英文标题】:Named parameters in asp.net mvc 5 SQL query 【发布时间】:2016-02-16 21:27:16 【问题描述】:

我有一个大的讨厌的 SQL 查询要在 asp.net mvc 5 中运行,它应该返回一个非 db-table 对象,并且需要参数化。

即。

context.Database.SqlQuery<MyObject>("select a, b from table where a = @par")

我可以将@par 的值作为参数传入

class MyObject 
  public a get;set;
  public b get;set;

无论出于何种原因,msdn 文档都假定除了最简单的查询之外不可能执行任何操作...https://msdn.microsoft.com/en-us/data/jj592907.aspx

【问题讨论】:

【参考方案1】:

给定:

var myPar = 1;

要使用参数,请尝试:

context.Database.SqlQuery<MyObject>("select a, b from table where a = @par", new SqlParameter("par", myPar));

或者:

context.Database.SqlQuery<MyObject>("select a, b from table where a = 0", myPar);

【讨论】:

【参考方案2】:

我不喜欢使用 SQL 选择字符串来避免潜在的 SQL 注入攻击。您可以通过 Linq 语法做到这一点:

 context.Database.table
     .Where(x => x.a == myPar)
     .Select(x => new MyObject  a = x.a, b = x.b );

【讨论】:

以上是关于asp.net mvc 5 SQL查询中的命名参数的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 中向控制器传递多个参数;此外,在 LINQ-to-SQL 中生成动态查询

在 sql asp.net mvc 5 中使用 linq 时如何格式化记录中的数据?

重命名 ASP.NET 中的“文化”查询参数以进行本地化

ASP.NET MVC 5 中的路由可选参数

如何在 asp.net mvc 5 中返回模型和参数中的另一个动作?

ASP.Net MVC 5 和 SQL 事务隔离级别