參數化查詢意思

參數化查詢(Parameterized Query)是一種使用變量(或參數)來替換查詢中的靜態值的方法。這種技術通常用於資料庫查詢中,可以提高查詢效率,並減少SQL injection(SQL注入)攻擊的風險。

在傳統的查詢寫法中,開發者會將查詢的值直接嵌入到SQL語句中,例如:

SELECT * FROM Users WHERE Name = 'John Doe';

這種寫法存在幾個問題:

  1. 當查詢的值需要變更時,需要重新編譯和執行整個查詢。
  2. 如果查詢的值中含有特殊字元(如單引號),可能會導致SQL injection攻擊。

參數化查詢通過將查詢的值作為參數傳遞給數據庫引擎來解決這些問題。數據庫引擎會將這些參數作為數據來處理,而不是作為SQL語句的一部分。例如:

SELECT * FROM Users WHERE Name = @Name;

在執行查詢時,開發者會將一個或多個參數的值傳遞給數據庫引擎:

using (var connection = new SqlConnection(connectionString))
{
    var command = new SqlCommand("SELECT * FROM Users WHERE Name = @Name", connection);
    command.Parameters.AddWithValue("@Name", "John Doe");
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // 處理數據
        }
    }
}

使用參數化查詢的好處包括:

  1. 提高了查詢的可讀性和可維護性,因為參數名稱通常比直接嵌入的值更具有描述性。
  2. 提高了查詢的執行效率,因為數據庫引擎可以重用相同的查詢計劃,而不是每次都重新編譯。
  3. 減少了SQL injection攻擊的風險,因為數據庫引擎會將參數作為數據來處理,而不是作為SQL語句的一部分。

參數化查詢是現代數據庫應用程式中常見的實踐,並且被各種數據庫訪問框架和庫(如ADO.NET、JDBC、ODBC等)所支持。