小编典典

参数化查询ado.net问题

sql

我正在使用此查询进行分页

string selectStatement = "SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY @sortMember @sortDirection ) AS RowNum, * FROM School) AS Rows WHERE RowNum > @pageFrom AND RowNum < @pageTo ";

command.Parameters.Add("@sortDirection", System.Data.SqlDbType.NVarChar, 50);
command.Parameters["@sortDirection"].Value = cmd.SortDescriptors.Count == 0 ? "" : cmd.SortDescriptors[0].SortDirection == System.ComponentModel.ListSortDirection.Ascending ? "" : "DESC";

如果sortDirection为“”,我将获得一个例外。如果您这样使用它,它可以正常工作,但我想对其进行参数化查询。解决办法是什么?

 string selectStatement = string.Format("SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY @sortMember {0} ) AS RowNum, * FROM School) AS Rows WHERE RowNum > @pageFrom AND RowNum < @pageTo ",System.ComponentModel.ListSortDirection.Ascending ? "" : "DESC);

我得到的例外是:’@ sortDirection’附近的语法不正确。


阅读 185

收藏
2021-04-07

共1个答案

小编典典

您无法参数化诸如表名,列,排序依据等内容。它们
查询。您将需要将期望值列入白名单(以避免SQL注入)并将其直接连接到查询中(这是您的string.Format用法)。

目前,排序依据是变量的值,每行不会改变。本质上,排序(按书面说明)将被忽略。

2021-04-07