我正在使用此查询进行分页
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'附近的语法不正确。
答案 0 :(得分:5)
您无法对表名,列,排序等内容进行参数设置。 查询。您需要将预期值列入白名单(以避免SQL注入)并将其直接连接到查询中(这是string.Format
用法所做的)。
目前,order-by位于变量的值上,每行不会更改。基本上,排序(如写)被忽略。
答案 1 :(得分:0)
这不是参数的工作原理。您必须动态构建查询的字符串。