繁体   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