3

我正在开发一个 Web 表单,该表单接收一个字符串,该字符串包含一个带有 SQL 参数的 SQL 查询语句。它为每个参数生成一个 ASP.NET 控件,然后将每个控件的值分配给 SQL 查询字符串的参数,a 将使用该参数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)点击将每个参数的值传递给SqlCommandas参数:

SqlCommand cmd = new SqlCommand(query, conn);

cmd.Parameters.AddWithValue("@P1", P1.Text);

cmd.Parameters.AddWithValue("@P2", P2.Text);

4)就在这里,没关系!

但是如果一个参数是可选的,我该如何管理它?

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

你能帮助我吗?

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

4

2 回答 2

5

将您的查询更改为最低限度:

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

然后将其余部分附加一个条件:

if(P2.Text != "")
{
    cmd.Parameters.AddWithValue("@P2",P2.Text);
    query += " AND field2=@P2";
}
于 2013-04-11T10:10:22.623 回答
2

您可以尝试使用 case 语句:

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

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

于 2013-04-11T10:12:20.310 回答