簡體   English   中英

使用string.format動態創建SQL查詢

[英]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 orderqry + 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
);

正如您所說,這兩個變量( shouldOrdershouldAppend )將幫助您解決“在不同情況下的差異查詢”。

為這些變量提供true或false將會更改將哪些文本輸入到String.Format中,並相應地更改查詢。

因此,如果使用shouldOrder = false; 查詢命令將不會獲得訂單部分。 設置shouldAppend = false; 將避免將多余的部分(附加)添加到SQL命令中。

現在,要小心!

這不會解決您的SQL注入問題。 我剛剛顯示了一個快速修復。

為了避免SQL注入,您必須更改SQL命令,並且不能再使用String.Format。

要了解如何執行此操作,請查看DGibbs注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM