[英]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.