在 SQL 中参数化“order by”

nos*_*nos 6 c# sql ado.net

在 ADO.NET 中参数化 order by 子句的正确方法是什么?

有时需要按 2 列排序,而默认情况下仅按 1 列排序,有时您只想将 ASC 更改为 DEC。在这种情况下,仅使用字符串连接是否可以(假设输入不是直接来自用户,而只是在代码中查找或多或少的硬编码值)

Rob*_*ley 6

尝试这样:

SELECT ...
ORDER BY 
   CASE WHEN @OrderBy = 'Option1' THEN SomeField END, 
   CASE WHEN @OrderBy = 'Option1' THEN SomeOtherField END DESC, 
   CASE WHEN @OrderBy = 'Option2' THEN Field75 END, 
  ...
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果 WHEN 不匹配,每个 CASE 语句将计算为 NULL。因此,如果您输入 Option2,那么您将获得前两个选项的常量值。

因此,使用它,您可以轻松地获得一些选项,让您按多个字段排序,或降序排序,或任何您想要的。


Rob*_*vey 3

SQL注入纯粹主义者会告诉你,字符串连接是绝对不允许的,因为总是存在另一个程序员可能扩展程序并将SQL语句暴露给外界的可能性。

然而,如果这些值是硬编码的(即作为常量),并且永远不会看到外部世界,那么是的,连接它是完全可以的。