我正在使用此查询进行分页
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’附近的语法不正确。
您无法参数化诸如表名,列,排序依据等内容。它们 是 查询。您将需要将期望值列入白名单(以避免SQL注入)并将其直接连接到查询中(这是您的string.Format用法)。
string.Format
目前,排序依据是变量的值,每行不会改变。本质上,排序(按书面说明)将被忽略。