首頁 >資料庫 >mysql教程 >使用 C# 在 MySQL 中使用參數化查詢時如何修復 IndexOutOfBoundsException?

使用 C# 在 MySQL 中使用參數化查詢時如何修復 IndexOutOfBoundsException?

DDD
DDD原創
2024-12-22 16:54:12155瀏覽

How to Fix IndexOutOfBoundsException When Using Parameterized Queries in MySQL with C#?

使用C# 對MySQL 中的參數化查詢錯誤進行故障排除

在使用C# 在MySQL 中使用參數化查詢時,避免可能導致的常見陷阱至關重要到錯誤。經常出現的一個此類問題是在新增第一個參數時遇到的 IndexOutOfBoundsException。

問題:

考慮以下簡化的程式碼片段:

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_2 = ?;";

public bool read(string id)
{
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.Add(new MySqlParameter("", val1));
    m.Parameters.Add(new MySqlParameter("", val2));
}

執行此程式碼時,請嘗試新增第一個參數(index 0).

解:

要解決此問題,定義參數化查詢的正確語法是使用命名參數而不是問號 (?)。命名參數更加健壯,並消除了編號佔位符索引引起的混亂:

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";

public bool read(string id)
{
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
}

此外,建議透過使用 ExecuteScalar 方法從查詢中獲取單一值來簡化程式碼。這消除了迭代資料讀取器並將結果直接轉換為所需資料類型(在本例中為整數)的需要:

public bool read(string id)
{
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
    level = Convert.ToInt32(m.ExecuteScalar());
    return true;
}

透過採用這些最佳實踐,您可以避免IndexOutOfBoundsException 和確保使用C# 在MySQL 資料庫中可靠地執行參數化查詢。

以上是使用 C# 在 MySQL 中使用參數化查詢時如何修復 IndexOutOfBoundsException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn