C# SqlCommand 中列名稱的動態查詢調整
嘗試使用SqlCommand 物件中的參數指定列名稱時,您可能會遇到錯誤指出參數不能用於列名。當嘗試執行列名稱可能不同的查詢時,此限制帶來了挑戰。
問題:
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
上述程式碼嘗試使用動態列執行查詢使用參數命名,但因上述錯誤而失敗。建議的一個潛在解決方法是使用帶有列名變數聲明的預存程序 (SP)。但是,這種方法可能很麻煩。
解決方案:
您可以在運行時動態建立查詢,而不是參數化列名稱。為了確保安全,您應該將輸入列入白名單,以防止注入攻擊。以下是如何實現此目的的範例:
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
在此程式碼中,「slot」的值用於在執行時間建立查詢字串。參數「name」仍然使用參數來指定,以防止SQL注入。透過動態建構查詢,您可以克服在 SqlCommand 中使用列名參數的限制。
以上是如何在 C# SqlCommand 查詢中動態指定列名,同時防止 SQL 注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!