参数化查询ado.net问题

时间:2011-06-16 17:31:07

标签: .net sql ado.net

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

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'附近的语法不正确。

2 个答案:

答案 0 :(得分:5)

您无法对表名,列,排序等内容进行参数设置。 查询。您需要将预期值列入白名单(以避免SQL注入)并将其直接连接到查询中(这是string.Format用法所做的)。

目前,order-by位于变量的值上,每行不会更改。基本上,排序(如写)被忽略。

答案 1 :(得分:0)

这不是参数的工作原理。您必须动态构建查询的字符串。