【问题标题】:C#, ASP.NET core | SqlException: Incorrect syntax near the keyword 'TOP'C#、ASP.NET 核心 | SqlException:关键字“TOP”附近的语法不正确
【发布时间】:2020-11-07 13:47:37
【问题描述】:

我在 ASP.NET Core 中尝试从我的小型数据库中获取数据。 我想从我的表中随机选择 2 行,但我无法让它工作。

我的数据库表:

我发现错误是因为我的SqlCommand 不正确,但我不知道如何改正。

我的 DAL:

public IEnumerable<IKarakter> GetSortedKarakters()
{
    using (SqlConnection connection = GetConnection())
    {
        connection.Open();

        var command = new SqlCommand("SELECT * FROM Karakter ORDER BY RAND() LIMIT 2;", connection);

        var reader = command.ExecuteReader();
        var sortedKarakters = new List<IKarakter>();

        while (reader.Read())
        {
            var karakter = new KarakterDTO
                        {
                            KarakterId = (int)reader["KarakterId"],
                            KarakterSoort = reader["KarakterSoort"]?.ToString(),
                            KarakterNaam = reader["KarakterNaam"]?.ToString()
                        };
            sortedKarakters.Add(karakter);
        }

        return sortedKarakters;
    }
}

我尝试过的查询:

  • SELECT * FROM Karatker ORDER BY RAND() LIMIT 10;
  • SELECT * FROM Karakter ORDER BY RAND() TOP 2;
  • SELECT * FROM Karakter TOP 2;
  • SELECT * FROM Karakter Limit 2;
  • SELECT TOP 2 * FROM Karakter ODER BY RAND();
  • SELECT TOP 2 FROM Karakter ODER BY RAND();

除了关键字之外,上述所有查询都会抛出相同的错误。

谁能帮忙?

编辑:当我尝试这个查询时:

SELECT TOP 2 * 
FROM dbo.Karakter; 

它显示了数据库的前2条记录,这证明错误不是其他层的问题,唯一的问题是查询本身。

【问题讨论】:

  • 你为什么不直接咨询SELECT上的official Microsoft documentation??它会清楚地表明 (1) LIMITNOT 一个有效的 T-SQL 关键字,并且 (2) 正确的语法是SELECT TOP (n) ......

标签: c# asp.net sql-server data-layers


【解决方案1】:

正确的查询是:

SELECT TOP 2 * 
FROM Karakter 
ORDER BY NEWID();

在这个网站上找到它:https://www.petefreitag.com/item/466.cfm

【讨论】:

  • NEWID() 在您的表格列中找不到。
【解决方案2】:

您可以使用SELECT TOP 2 * FROM Karakter ORDER BY ID ;

【讨论】:

  • 当我尝试这个时,我得到以下错误:SqlException:关键字'BY'附近的语法不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2013-12-16
  • 2021-03-08
相关资源
最近更新 更多