簡體   English   中英

在WHERE子句中處理可選參數

[英]Manipulate optional parameters in the WHERE clause

我正在處理一個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)單擊時,將每個參數的值作為參數傳遞給SqlCommand

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語句。

將查詢更改為最小值:

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或為空,它將被忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM