C# Dapper 查詢時,使用 IN 設定多個條件

April 28, 2024

在 SQL 內的 WHERE 可以使用 IN 查詢包含多個數字、字串 … 等條件的資料,在 Dapper 裡面其實也可以查詢多個參數條件。

使用方式

以下是一個查詢範例:

var queryNames = new[] { "Alice", "Bob", "Candy" };
var sql = "SELECT * FROM Person WHERE Name IN @Names;";
var products = connection.Query(sql, new {Names = queryNames });

直接在 Query 方法的引數傳入陣列即可,參數名稱要和 SQL 查詢語法內的變數名稱相同。

一定要傳參數查詢多個條件嗎?

如果不傳參數,而是直接組合查詢語法與條件,可能會遇到 SQL Injection 的問題。Learn Dapper 網站提供一個登入查詢範例,回傳帳號和密碼:

SELECT * FROM users WHERE username = 'mike' AND password = 'pass1'

有心人士可以在密碼傳入字串 ' or ''=' ,查詢變成

SELECT * FROM users WHERE username = 'mike' AND password = '' or ''=''

就能查詢到所有的資料 (或因此順利登入系統)。

真的很危險!

透過 Dapper 傳入參數,會幫你確保安全,避免以上 SQL Injection 的情形發生。

參考資料