在WHERE子句中操作可选参数

本文关键字:参数 操作 WHERE 子句 | 更新日期: 2023-09-27 18:08:41

我正在研究一个web表单,它接收一个包含SQL参数的SQL查询语句的字符串。它生成一个ASP。. NET控件的每个参数,然后将每个控件的值分配给SQL查询字符串的参数,该字符串将被SqlCommand用于填充DataAdapter

我在管理可选参数时遇到了一些问题。

1)将字符串传递给页面:

string query = "SELECT * FROM Table WHERE Field1=@P1 AND field2=@P2";

2)为每个参数生成一个web控件

TextBox P1 = new TextBox();
P1.ID = "P1";
...
TextBox P2 = new TextBox();
P2.ID = "P2";
...
PanelParameters.Controls.Add(P1);
PanelParameters.Controls.Add(P1);

3) On点击将每个参数的值作为参数传递给SqlCommand:

SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@P1", P1.Text);
cmd.Parameters.AddWithValue("@P2", P2.Text);

4)在这里就可以了!

但是如果参数是OPTIONAL我怎么管理它?

如果P2是可选的,用户不能编译它,在这种情况下,我不想设置P2 = NULL(设置参数DbNull.Value的值),但我希望P2将从查询SQL中消失。

你能帮我吗?

* UPDATE *我无法编辑我收到的查询,因为它包含非常复杂的SQL语句。

在WHERE子句中操作可选参数

将查询更改为最小值:

string query="SELECT * FROM Table WHERE Field1=@P1

然后加上一个条件:

if(P2.Text != "")
{
    cmd.Parameters.AddWithValue("@P2",P2.Text);
    query += " AND field2=@P2";
}

您可以尝试使用case语句:

SELECT * FROM Table WHERE Field1=@P1 AND CASE WHEN field2= null OR field2= '' THEN field2 ELSE @P2 END

你仍然会发送参数,但如果它是null或空的,它将被忽略。