2014-10-28 42 views
0

我創建了一個Web表單,並在Web表單中有一個多選下拉列表。我從多選下拉列表中獲取價值並將其傳遞給隱藏字段。然後,我將隱藏字段的值作爲參數添加到SqlCommand中。據瞭解,我有一個查詢,參數與查詢中的'IN'子句一起使用。Asp.Net如何將多個值傳遞給查詢中使用'IN'子句的參數

當我選擇只有一個選項,它工作順利,我可以得到數據集。但是當它被選中multiple.it沒有返回結果。

查詢:

select .... from tblReservation 
    Where type IN (@type) 

代碼:

command.Parameters.Add(new SqlParameter("@type", HiddenField.Value)); 

當一個選項被選擇HiddenField.Value = 「飛行」

當多個選項被選擇HiddenField.Value =「飛行, Hotel,rentacar「

+0

是不是有反正沒有更改查詢。 – 2014-10-28 13:10:15

回答

1

SQL Server將您的IN子句視爲:

IN ('flight,Hotel,rentacar') 

你想要的是

IN ('flight','Hotel','rentacar') 

所以你需要一個參數對每種類型。

您可以使用此方法:

string[] types = HiddenField.Value.Split(','); // { "flight","Hotel","rentacar" }; 
string cmdText = "SELECT * FROM tblReservation WHERE type IN ({0})"; 

string[] paramNames = types.Select(
    (s, i) => "@type" + i.ToString() 
).ToArray(); 

string inClause = string.Join(",", paramNames); 
using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause))) { 
    for(int i = 0; i < paramNames.Length; i++) { 
     cmd.Parameters.AddWithValue(paramNames[i], types[i]); 
    } 
} 

參考:Parameterize an SQL IN clause

相關問題