【问题标题】:How To execute SQL Query in ASP.NET Core API如何在 ASP.NET Core API 中执行 SQL 查询
【发布时间】:2022-03-03 17:45:04
【问题描述】:

我有这个 SQL 查询:

DECLARE @pageNo int=1
DECLARE @pageSize int=2

SELECT top 2 id,
Title,
Author,
NumberOfPages,
PublishedAt,
RowNumber
FROM 

(

SELECT top 2 id, Title, Author,
NumberOfPages,PublishedAt,
Row_Number() over (order by id desc) as RowNumber 
FROM Books 

)T
WHERE
T.RowNumber BETWEEN ((@pageNo-1)*@pageSize)+1 AND (@pageNo*@pageSize)

我想在 ASP.NET 核心中使用 C# 执行这个 SQL 查询

我试过这个代码:

[HttpGet]
public async Task<ActionResult<IEnumerable<Books>>> GetBooks()
        {
          

  
      return await _context.Books.FromSqlRaw("Select * from Books where id = 2").ToListAsync();

           

        }

但此代码仅适用于上一个示例中的单个 Sql 查询行

Select * from Books where id = 2

但是当我尝试使用多行的复杂 SQL 查询时不起作用

希望对你有所帮助

非常感谢

【问题讨论】:

  • 我不确定我是否遵循您在这里想要实现的目标。您的子查询只会返回 0 到 2 行,因此如果 @pageNo 的值大于 2,您将不会得到任何行。此外,如果 @pageSize2 高,您仍然只能得到 2 行。
  • 此 SQL 查询与其他编程语言完美配合,例如使用 php 完美工作,但我不知道如何使用 ASP.net 核心执行相同的查询

标签: sql-server database asp.net-web-api c#-4.0 isqlquery


【解决方案1】:

您必须将整个查询放在一行中或使用“+”或字符串生成器来连接行

var query ="DECLARE @pageNo int=1 DECLARE @pageSize int=2 SELECT top 2 id,..";

//or
 var query = "DECLARE @pageNo int=1 " +
             "DECLARE @pageSize int=2 " + 
             "SELECT top 2 id, " +

【讨论】:

    【解决方案2】:

    我认为最好的方法是将该查询写入文本文件并将其放入您的项目中,然后使用这行代码从该文件中读取文本

    string queryText = File.ReadAllText(@"D:\yourpathhere\QueryTextFile.txt");
    

    然后使用 queryText 变量

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多