我剛剛回答了一個非常類似的問題與PHP和MySQL,但我覺得答案同樣適用於這裏,所以我會複製/粘貼它。
我只是在Visual Studio中處理了同樣的問題。首先,我創建了一串參數添加到SQL語句中。你只需要對付問號,這麼多的我做了什麼比你更需要的(?):
string[] inClause = new string[keywordTerms.Length];
for (int i = 0; i < keywordTerms.Length; i++)
inClause[i] = ":keyword" + i.ToString("00");
然後創建我的選擇的時候,我把以下內容:
sqlStatement += "WHERE kw.keyword IN (" + String.Join(", ", inClause) + ")"
最後,我在此代碼中添加了參數:
for (int i = 0; i < keywordTerms.Length; i++)
cmd.Parameters.Add(inClause[i], OracleDbType.Varchar2, 20, "keyword").Value = keywordTerms[i];
希望對您有所幫助!
優雅的解決方案是一個分貝接受一個陣列或CTE。如果沒有他們,這將有一個醉酒的大象踩着高蹺的恩典。您可以傳遞一個以逗號分隔的值作爲參數,然後將其切入臨時表並使用連接而不是in。 – 2013-02-21 20:33:21
不幸的是,我被困在當前的技術堆棧中。我認爲將一個字符串切成臨時表可能是最可靠的方式,就像那樣糟糕。 – SilverSN95 2013-02-21 21:15:39
至少它隱藏了前端代碼中的亂七八糟,如果出錯,你可以責怪DBA。 :) – 2013-02-21 21:28:39