我允许用户在视图中使用3个下拉列表创建自己的SELECT语句。这些下拉列表将在WHERE
子句中生成SQL。例如:WHERE StatusId > 6
。中间下拉列表用于选择运算符,其中有6个选项:=, >, >=, <, <=, LIKE
。我试图避免动态SQL以防止注入。
所以这是用户进行选择时调用的SQL代码(在SP中):
If @topOperatorInput = '='
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput = @topRightInput;
End
Else If @topOperatorInput = '>'
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput > @topRightInput;
End
Else If @topOperatorInput = '>='
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput >= @topRightInput;
End
Else If @selectedColumns = '<'
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput < @topRightInput;
End
Else If @topOperatorInput = '<='
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput <= @topRightInput;
End
Else If @topOperatorInput = 'LIKE'
Begin
Select @selectedColumns
from ReturnAuthorization
where @topLeftInput LIKE @topRightInput;
End
您在此处看到的所有变量都是来自MVC控制器的输入变量(用户选择)。
这里的事情对我来说有点棘手。用户可以选择AND
选项,他们可以在页面中添加3个下拉菜单以供选择。
例如:WHERE StatusId > 6 AND UserId = 2
现在,新的运算符下拉列表在混合中添加了另外6个选项。为了适应,如果我保留这种当前格式,我将不得不在上面显示的6个选项中的每一个中嵌套6个IF ... ELSE IF。
任何以较便宜的方式执行此操作的解决方案都会有所帮助。谢谢!
答案 0 :(得分:0)
使用开关盒,以便检查所需的唯一条件并交换所有其他条件而不检查