参数化查询ado.net问题
我正在使用此查询进行分页参数化查询ado.net问题,.net,sql,ado.net,.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",
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用法的作用
目前,orderby位于变量的值上,每行不变。本质上,写入的排序被忽略。您不能参数化诸如表名、列、排序依据等内容。它们是查询。您需要列出期望值以避免SQL注入,并将其直接连接到查询中,这就是string.Format用法的作用
目前,orderby位于变量的值上,每行不变。基本上,写入的排序被忽略。这不是参数的工作方式。您必须动态构建查询字符串。参数不是这样工作的。您必须动态生成查询的字符串。检查@sortDirection是否有效,或者给它一个默认值?检查@sortDirection是否有效,或者给它一个默认值?