2012-01-20 75 views
0

我似乎無法得到這與SQL參數使用參數()不工作

string itemIds = "86,74,32"; 

cmd.Parameters.AddWithValue("Items", itemIds); 

        string sql = "SELECT * " + 
           "FROM Items " + 
           "WHERE ItemIds IN(@Items)"; 

回答

2

工作應該seperately添加的每個參數。

string item1 = "86"; 
string item2 = "32"; 

cmd.Parameters.AddWithValue("item1", item1); 
cmd.Parameters.AddWithValue("item2", item2); 

        string sql = "SELECT * " + 
           "FROM Items " + 
           "WHERE ItemIds IN(@item1,@item2)"; 

這可能會奏效。

編輯與循環

string [] numbers = {"12", "23", "34"}; 
string [] parameters = new string[numbers.Length]; 
for (int i = 0; i < numbers.Length; i++) 
{ 
    cmd.Parameters.AddWithValue("param"+i, numbers[i]); 
    parameters[i] = "@param" + i; 
} 

var str = String.Join(",", parameters); 
string sql = String.Format("SELECT * FROM Items WHERE ItemIds IN({0})",str); 
+0

我有一個項目的動態數,所以我不認爲這會工作 – chobo

+0

@chobo爲什麼它不應該工作?一個for lop會好嗎? – adt

+0

@chobo i'have用for循環版編輯了我的答案。 – adt

1

你不能把的In()參數的整個列表中一個 SQL參數,你必須把每一個在一個單獨的參數來代替。

這裏是構建查詢字符串,並添加參數一種優雅的方式:
Parameterize an SQL IN clause