问:如何在 ASP.NET Core 中执行查询字符串?

Posted

技术标签:

【中文标题】问:如何在 ASP.NET Core 中执行查询字符串?【英文标题】:Q: How can I execute a query string in ASP.NET Core? 【发布时间】:2019-09-23 02:50:43 【问题描述】:

我正在学习 ASP.NET Core,并且正在使用 SQL Server 构建 Web API。

但是使用 LINQ 很困难,因为我只知道一点,不能使用复杂的查询。

这就是为什么我想像这样使用 SQL 查询

SELECT * 
FROM A 
WHERE A.ID = 1

如何在 ASP.NET Core 中使用它?

感谢您的帮助!

【问题讨论】:

使用这个有用的链接:***.com/questions/53517493/… 如果您基于查询字符串参数构建 SQL 查询,请考虑SQL Injection 漏洞。 【参考方案1】:

您可以在 asp.net core 中使用带有类似功能的 ADO

public static SqlDataReader ExecuteReader(SqlConnection conn, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
 
 SqlCommand cmd = conn.CreateCommand();
 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
 var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 return rdr;
 

完整的例子可以找到here

【讨论】:

【参考方案2】:

您可以使用 FromSql 扩展方法开始基于原始 SQL 查询的 LINQ 查询。

var blogs = context.Blogs
           .FromSql("SELECT * FROM Blogs")
           .Where(b => b.Id ==1)
           .FirstOrDefault();

或者您也可以参数化用户输入以防止 SQL 注入攻击成功的可能性。

var blogs= context.blogs.FromSql("SELECT * From Blogs Where Id = 0", id).FirstOrDefault();

SQL 命令可以是返回所有必需数据字段的任何有效 SQL 语句。可以通过 FromSql 方法调用存储过程。DbContext 公开了一个Database 属性,其中包括一个名为ExecuteSqlCommand 的方法。此方法返回一个整数,指定受传递给它的 SQL 语句影响的行数。有效的操作是 INSERT、UPDATE 和 DELETE。该方法不用于返回实体。

更多详情,您可以参考以下链接:

https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

https://www.learnentityframeworkcore.com/raw-sql

【讨论】:

以上是关于问:如何在 ASP.NET Core 中执行查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASP.NET Core 从查询字符串中读取值?

如何在 asp.net core 中编写一个高性能的 sql 查询应用程序?

如何让 ASP.NET Core 支持绑定查询字符串中的数组

asp.net 查询大数据量(百万条以上)如何快

如何让 ASP.NET Core 支持绑定查询字符串中的数组

如何创建不依赖于 ASP.NET Core 声明的自定义 Authorize 属性?