使用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中文網其他相關文章!