【发布时间】:2020-10-07 15:22:40
【问题描述】:
我使用的是 Dapper 2.0.35,MS SQL Server 14.0.1。运行以下代码时出现 SQL 异常:
string sortField = "Id";
switch (sortBy)
{
case "city":
sortField = "City";
break;
case "state":
sortField = "State";
break;
case "county":
sortField = "County";
break;
case "country":
sortField = "Country";
break;
default:
break;
}
// Get all customers based on the filter criteria
string sortOrder = sortDesc == true ? "DESC" : "ASC";
int offsetRows = pageSize * (pageNumber - 1);
var parameters = new
{
SortField = sortField,
SortOrder = sortOrder,
OffsetRows = offsetRows,
PageSize = pageSize,
};
// Execute!
var sql = "SELECT * FROM Customer ORDER BY @SortField @SortOrder OFFSET @OffsetRows ROWS FETCH NEXT @PageSize ROWS ONLY";
var result = (await connection.QueryAsync<Customer>(sql, parameters)).AsList();
在我看来,这是一个有效的 SQL 查询。 Exception 在@SortOrder 附近说语法不正确,但我在哪里做错了?我在 SQL 中测试了以下查询(类似于我的代码?),运行良好:
SELECT * FROM Customer ORDER BY County ASC OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY
我哪里做错了?
【问题讨论】:
-
您不能参数化订购字段和订购方向。你真的写了
ORDER BY value1 value2。 -
@LasseV.Karlsen 给了我正确的答案。是的,这就是为什么。所以我应该这样写我的查询? $"SELECT yadayada {sortField} {sortOrder} yadayada"
标签: c# sql-server