[英]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.