C#,ASP.NET核心| SqlException:关键字“ TOP”附近的语法不正确

问题描述

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

我的数据库表:

My databasetable

我发现错误是因为我的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 TOP 2 * 
FROM Karakter 
ORDER BY NEWID();

在以下站点上找到它:https://www.petefreitag.com/item/466.cfm

,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...