[英]SQL query formation dynamically, using string.format
我在格式化查詢時遇到了一個嚴重的問題,它也可能導致SQL注入,我看到了一些類似的qstns,但是由於我是新手,所以不確定如何在C#中使用它。 我使用c#,Odbc命令
我有3個字符串,例如qry ="select description from TableA" , qryOrder = " order by description" , qryAppend = " where ID = '{0}' order by description\\", _selectedPlantID"
前提是_selectedId
是另一個變量,現在我想要在不同情況下使用這些變量來形成差異查詢,例如qry + qry order
或qry + qryAppend
。
由於還需要_selectedPlantId
,因此我將string.Format用作:
_cmd.CommandText = "string.Format(\"" + qry + qryAppend + ")";
但是它不起作用。 有什么辦法嗎? 錯誤是帶引號的SQL語法錯誤
提前致謝 !!
簡而言之,這應該使其工作。 您將需要兩個變量(布爾),稍后我將解釋原因:
var shouldOrder = true;
var shouldAppend = true;
_cmd.CommandText = String.Format(
"{0} {1} {2}",
qry,
shouldOrder ? qryOrder : String.Empty,
shouldAppend ? qryAppend : String.Empty
);
正如您所說,這兩個變量( shouldOrder
和shouldAppend
)將幫助您解決“在不同情況下的差異查詢”。
為這些變量提供true或false將會更改將哪些文本輸入到String.Format中,並相應地更改查詢。
因此,如果使用shouldOrder = false;
查詢命令將不會獲得訂單部分。 設置shouldAppend = false;
將避免將多余的部分(附加)添加到SQL命令中。
這不會解決您的SQL注入問題。 我剛剛顯示了一個快速修復。
為了避免SQL注入,您必須更改SQL命令,並且不能再使用String.Format。
要了解如何執行此操作,請查看DGibbs注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.