具有LIKE 和IN 條件的參數化查詢
參數化查詢中的一個常見障礙是處理涉及IN 和LIKE 子句的複雜條件。在這種情況下,確保使用正確的語法來實現參數化和有效性至關重要。
考慮以下場景:
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID IN (@categoryids) OR name LIKE '%@name%' ", conn); comm.Parameters.Add("@categoryids", SqlDbType.Int); comm.Parameters["@categoryids"].Value = CategoryIDs; comm.Parameters.Add("@name", SqlDbType.Int); comm.Parameters["@name"].Value = Name;
這裡的目標是建構一個查詢根據以逗號分隔的類別ID (CategoryID) 列表和可能包含特殊字元的字串(Name) 檢索產品。但是,上面的程式碼將無法正常運行,因為:
正確的語法需要多步驟方法:
以下程式碼示範了修改後的方法:
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952, 1953, 1954, 1955, 1972, 2022 }; SqlCommand comm = conn.CreateCommand(); string[] parameters = new string[categoryIDs.Length]; for(int i=0;i<categoryIDs.Length;i++) { parameters[i] = "@p"+i; comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); } comm.Parameters.AddWithValue("@name",$"%{Name}%"); comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN ("; comm.CommandText += string.Join(",", parameters) + ")"; comm.CommandText += " OR name LIKE @name";
此程式碼產生一個完全參數化的查詢,滿足 IN 和 LIKE 條件的要求。
以上是如何使用 LIKE 和 IN 子句正確參數化 SQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!