【发布时间】:2021-05-11 19:30:13
【问题描述】:
我正在尝试从 Visual Studio 的数据库中检索表中的随机行。 但是,它无法检索随机行并引发此特定异常:
System.Data.SqlClient.SqlException: 'LIMIT' 附近的语法不正确。'
这是我检索随机表行的函数代码:
Voucher randomVoucher = null;
int voucherID;
string voucherName, voucherDescription, discountCode;
decimal discountAmount;
string queryStr = "SELECT * FROM Voucher ORDER BY RAND() LIMIT 1; ";
SqlConnection conn = new SqlConnection(_connStr);
SqlCommand cmd = new SqlCommand(queryStr, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
voucherID = int.Parse(dr["VoucherID"].ToString());
voucherName = dr["VoucherName"].ToString();
voucherDescription = dr["VoucherDescription"].ToString();
discountAmount = decimal.Parse(dr["DiscountAmount"].ToString());
discountCode = dr["DiscountCode"].ToString();
randomVoucher = new Voucher(voucherID, voucherName, voucherDescription, discountAmount, discountCode);
}
else
{
randomVoucher = null;
}
conn.Close();
dr.Close();
dr.Dispose();
return randomVoucher;
【问题讨论】:
-
什么是“Visual Studio 的数据库”?你是说 SQL Server Express 吗?
-
SQL Server 不使用
LIMIT,而是使用SELECT TOP 1 ...,语法不同。 -
RAND()真的是ORDER BY的有效参数吗?我会考虑在两个查询中进行,一个计数,在 c# 中创建一个随机数,然后 getting that specific row. -
TOP 1 每次只返回第一行。
-
将查询改为
SELECT TOP 1 * FROM Voucher ORDER BY NEWID()
标签: c# sql sql-server