首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 使用參數化 SQL 語句訪問 MySQL 資料庫完整指南

     編輯:關於C#

前言

在 C# 應用程式中操作 MySQL 資料庫時,使用參數化查詢(Parameterized Query)是防止 SQL 注入攻擊、提升程式碼可讀性與維護性的最佳實踐。本文將透過完整範例示範如何使用 MySqlConnection、MySqlCommand 以及 Parameters.AddWithValue 方法安全地執行插入操作。

核心程式碼範例

using MySql.Data.MySqlClient;

MySqlConnection conn = null;
MySqlCommand cmd = null;

try
{
    // 連線字串設定(請依實際環境調整)
    string connStr = "server=localhost;database=db_name;uid=user;pwd=password;pooling=false;";
    conn = new MySqlConnection(connStr);
    conn.Open();

    // 使用參數化查詢:?ParName 為 MySQL 參數標記
    string sql = "INSERT INTO MyTable VALUES (null, ?ParName);";
    cmd = new MySqlCommand(sql, conn);

    // 參數值處理:將雙引號替換為 ^ 以示範資料清洗
    string inputValue = "Sample value passed \"";
    string safeValue = inputValue.Replace("\"", "^");

    // 加入參數,自動推斷型別
    cmd.Parameters.AddWithValue("?ParName", safeValue);

    // 執行非查詢命令(INSERT/UPDATE/DELETE)
    int rowsAffected = cmd.ExecuteNonQuery();
    Console.WriteLine($"成功插入 {rowsAffected} 筆資料。");
}
catch (Exception ex)
{
    Console.WriteLine($"資料庫操作發生錯誤:{ex.Message}");
}
finally
{
    // 確保資源釋放
    if (conn != null && conn.State == System.Data.ConnectionState.Open)
        conn.Close();
}

關鍵點解析

  • 參數標記:MySQL 使用 ? 作為參數前綴(如 ?ParName),這與 SQL Server 的 @ 或 Oracle 的 : 不同。
  • AddWithValue 便利性:自動推斷資料型別,減少手動指定 MySqlDbType 的麻煩。
  • 資料清洗:範例中展示簡單的字串替換,實務上應依據業務需求進行驗證與清洗。
  • 資源管理:使用 try/finally 或 using 區塊確保連線正確關閉,避免連線洩漏。

進階建議

在實際專案中,建議採用 using 語法簡化資源釋放,並考慮使用 Dapper 或 Entity Framework 等 ORM 框架進一步提升開發效率與安全性。參數化查詢不僅能防禦 SQL 注入,也能讓資料庫引擎重複使用執行計畫,提升效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved